Zliczanie słów w łańcuchu tekstowym


Tematy pokrewne
Łańcuchy znakowe
Podstawowe pojęcia dotyczące przetwarzania tekstów
Podstawowe operacje na łańcuchach znakowych
Naiwne wyszukiwanie wzorca w tekście
Wyszukiwanie maksymalnego prefikso-sufiksu
Szybkie wyszukiwanie wzorca algorytmem Morrisa-Pratta
Szybkie wyszukiwanie wzorca algorytmem Knutha-Morrisa-Pratta
Szybkie wyszukiwanie wzorca uproszczonym algorytmem Boyera-Moore'a
Szybkie wyszukiwanie wzorca pełnym algorytmem Boyera-Moore'a
Wyszukiwanie wzorca algorytmem Karpa-Rabina
Zliczanie słów w łańcuchu
Dzielenie łańcucha na słowa
Wyszukiwanie najdłuższego słowa w łańcuchu
Wyszukiwanie najdłuższego wspólnego podłańcucha
Wyszukiwanie najdłuższego wspólnego podciągu
Wyszukiwanie najkrótszego wspólnego nadłańcucha
Wyszukiwanie słów podwójnych
Wyszukiwanie palindromów
MasterMind – komputer kontra człowiek
MasterMind – człowiek kontra komputer
Szyfr Cezara
Szyfrowanie z pseudolosowym odstępem
Szyfry przestawieniowe
Szyfr Enigmy
Szyfrowanie RSA
Dodawanie dużych liczb
Mnożenie dużych liczb
Potęgowanie dużych liczb
Duże liczby Fibonacciego
Haszowanie
Podstawowe operacje na tablicach
Wyszukiwanie liniowe

 

Problem

W łańcuchu s wyznaczyć liczbę wszystkich słów.


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 wykonuj K04...K09 ; przeglądamy znaki łańcucha s
K04:     Jeśli s[i] = cyfra_lub_litera, idź do K07  
K05:     t ← false ; zerujemy znacznik słowa
K06:     Następny obieg pętli K03  
K07:     Jeśli t = true, następny obieg pętli K03 ; słowo już zliczone
K08:     t ← true ; ustawiamy znacznik słowa
K09:     lsls + 1 ; zliczamy słowo
K10: Zakończ z wynikiem ls  

 

Program

Ważne:

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ść.

 

Lazarus
// Zliczanie wyrazów w łańcuchu tekstowym
// Data:  5.07.2008
// (C)2012 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.
Code::Blocks
// Zliczanie wyrazów w łańcuchu tekstowym
// Data:  5.07.2008
// (C)2012 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;
}
Free Basic
' Zliczanie wyrazów w łańcuchu tekstowym
' Data:  5.07.2008
' (C)2012 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)2012 mgr Jerzy Wałaszek

Wprowadź tekst:


...

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.