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

©2024 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.

Elementy 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: ; przeglądamy znaki łańcucha s
     wykonuj kroki K04…K09
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, ; słowo już zliczone
       to następny obieg pętli K03
K08:   t ← true ; ustawiamy znacznik słowa
K09:   lsls+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 >= 'A') && (c <= 'Z')) ||
       ((c >= 'a') && (c <= 'z')) ||
        (c == '_') || (c == '-')  ||
        (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("A")) And (c <= Asc("Z"))) Or _
     ((c >= Asc("a")) And (c <= Asc("z"))) Or _
      (c  = Asc("_"))  Or (c  = Asc ("-")) 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
Python (dodatek)
# Zliczanie wyrazów w łańcuchu tekstowym
# Data: 13.03.2024
# (C)2024 mgr Jerzy Wałaszek
# --------------------------

s = input()
t, ls = False, 0
x = "AĄBCĆDEĘFGHIJKLŁMNOÓPQRSŚTUVWXYZŻŹ"
x += x.lower()
x += "_-0123456789"
for i in s:
    if x.find(i) >= 0:
        if not t:
            t = True
            ls += 1
    else:
        t = False
print(ls)
print()
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

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
©2024 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.