Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2020 mgr Jerzy Wałaszek
I LO w Tarnowie

Zliczanie słów w łańcuchu tekstowym

SPIS TREŚCI
Tematy pomocnicze

Problem

W łańcuchu s  należy określić liczbę wszystkich słów.

Rozwiązanie

Zadanie zliczenia słów ( ang. words counting ) sprowadza się do wyszukiwania liniowego znaków. Na początku pracy algorytmu ustawiamy znacznik słów t  na false. Wartość true tego znacznika oznacza przetwarzanie znaków słowa. Licznik słów ls  zerujemy. Teraz w pętli przeglądamy kolejne znaki łańcucha s. Jeśli napotkanym znakiem jest znak litery lub cyfry, to sprawdzamy stan znacznika t. Jeśli jest on ustawiony na false, to znaczy, iż napotkaliśmy w tekście początek słowa. W takim przypadku ustawiamy t  na true i zwiększamy o 1 licznik ls.  Jeśli znacznik t  jest już ustawiony na true, to napotkaliśmy kolejną literę już zliczonego słowa – nic nie robimy. Jeśli napotkamy inny znak, to traktujemy go jako separator i znacznik t  zawsze zerujemy. Po przeglądnięciu wszystkich znaków łańcucha s  w zmiennej ls  mamy liczbę słów.

Algorytm zliczania wyrazów

Wejście:

s  – łańcuch tekstowy.

Wyjście:

Liczba słów zawartych w łańcuchu s.

Zmienne pomocnicze:

i  –  indeks znaków w łańcuchu s, i  ∈ N
ls  – licznik słów, ls  ∈ N
t  – znacznik słowa

Lista kroków:

K01: ls  ← 0 zerujemy licznik słów
K02: t  ← false zerujemy znacznik słowa
K03: Dla i  = 0, 1, ..., | s | - 1:
wykonuj kroki K04...K09
przeglądamy znaki łańcucha s
K04:     Jeśli s [ i  ] = cyfra_lub_litera,
    to idź do kroku K07
 
K05:     t  ← false zerujemy znacznik słowa
K06:     Następny obieg pętli K03  
K07:     Jeśli t  = true,
    to następny obieg pętli K03
słowo już zliczone
K08:     t  ← true ustawiamy znacznik słowa
K09:     ls  ← ls  + 1 zliczamy słowo
K10: Zakończ z wynikiem ls  

Przykładowe programy

Uwaga:

Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich.

Program odczytuje wiersz znaków, a następnie zlicza występujące w nim wyrazy i wypisuje ich ilość.
Pascal
// Zliczanie wyrazów w łańcuchu tekstowym
// Data:  5.07.2008
// (C)2020 mgr Jerzy Wałaszek
//-----------------------------

program prg;

var
  s : ansistring;
  i, ls : integer;
  t : boolean;

begin
  readln ( s );
  t := false; ls := 0;
  for i := 1 to length ( s ) do
    if s [ i ] in [ '0'..'9', '_', '-', 
                'A'..'Z', 'a'..'z', 
                'Ą', 'ą', 'Ć', 'ć', 'Ę', 'ę', 
                'Ł', 'ł', 'Ń', 'ń', 'Ó', 'ó', 
                'Ś', 'ś', 'Ź', 'ź', 'Ż', 'ż' ] then
    begin
      if not t then
      begin
        t := true; inc ( ls );
      end
    end
    else t := false;
  writeln ( ls );
  writeln;
end.
C++
// Zliczanie wyrazów w łańcuchu tekstowym
// Data:  5.07.2008
// (C)2020 mgr Jerzy Wałaszek
//-----------------------------

#include <iostream>
#include <string>

using namespace std;

int main( )
{
  string s;
  int i, ls, n;
  unsigned char c;
  bool t;

  getline ( cin, s );
  n = s.length( ); t = false; ls = 0;
  for( i = 0; i < n; i++ )
  {
    c = s [ i ];
    if( ( ( c >= '0' ) && ( c <= '9' ) ) ||
          ( c == '_' ) || ( c == '-' )   ||
        ( ( c >= 'A' ) && ( c <= 'Z' ) ) ||
        ( ( c >= 'a' ) && ( c <= 'z' ) ) ||
          ( c == 164 ) || ( c == 165 )   ||
          ( c == 143 ) || ( c == 134 )   ||
          ( c == 168 ) || ( c == 169 )   ||
          ( c == 157 ) || ( c == 136 )   ||
          ( c == 227 ) || ( c == 228 )   ||
          ( c == 224 ) || ( c == 162 )   ||
          ( c == 151 ) || ( c == 152 )   ||
          ( c == 141 ) || ( c == 171 )   ||
          ( c == 189 ) || ( c == 190 ) )
    {
      if( !t )
      {
        t = true; ls++;
      }
    }
    else t = false;
  }
  cout << ls << endl << endl;
  return 0;
}
Basic
' Zliczanie wyrazów w łańcuchu tekstowym
' Data:  5.07.2008
' (C)2020 mgr Jerzy Wałaszek
'-----------------------------

Dim As String s
Dim As Uinteger i, ls, n, t, c

Line Input s
n = Len ( s ): t = 0: ls = 0
For i = 1 To n
  c = Asc ( Mid ( s, i, 1 ) )
  if( ( ( c >= Asc ( "0" ) ) And ( c <= Asc ( "9" ) ) ) Or ( c = Asc ( "_" ) )  Or ( c = Asc ( "-" ) )       Or _
      ( ( c >= Asc ( "A" ) ) And ( c <= Asc ( "Z" ) ) ) Or ( ( c >= Asc ( "a" ) ) And ( c <= Asc ( "z" ) ) ) Or _
        ( c = 164 ) Or ( c = 165 )  Or ( c = 143 ) Or ( c = 134 )  Or ( c = 168 ) Or ( c = 169 ) Or _
        ( c = 157 ) Or ( c = 136 )  Or ( c = 227 ) Or ( c = 228 )  Or ( c = 224 ) Or ( c = 162 ) Or _
        ( c = 151 ) Or ( c = 152 )  Or ( c = 141 ) Or ( c = 171 )  Or ( c = 189 ) Or ( c = 190 ) ) Then
      If t = 0 Then
        t = 1: ls += 1
      End If
    Else
      t = 0
  End If
Next
Print ls
Print
End
Wynik:
Ala ma krokodyla z plastiku i gumy, ale co to nas obchodzi.
12
Zliczanie wyrazów w łańcuchu tekstowym
(C)2020 mgr Jerzy Wałaszek

Wprowadź tekst:

...

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2020 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.