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

©2026 mgr Jerzy Wałaszek

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 (na false). 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 \in \mathbb{N}}\).
\(ls\) : licznik słów; \({ls \in \mathbb{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
JavaScript
<html>
  <head>
    <title>
      Zliczanie
      wyrazów
    </title>
  </head>
  <body>

<div style="overflow-x: auto;"
     align="center">
  <table
  border="0"
  cellpadding="4"
  style="border-collapse:
         collapse">
    <tr>
      <td nowrap>
        <form
        name="frm"
        style="text-align:
               center;
               background-color:
               #E7E7DA">
          <b>
          Zliczanie wyrazów
          w łańcuchu tekstowym
          </b><br/>
	      (C)2026 mgr
	      Jerzy Wałaszek
	      <hr>
          Wprowadź tekst:<br>
          &nbsp;
          <input
          type="text"
          name="inp_s"
          size="50">
          &nbsp;
          <hr>
          <input
          type="button"
          value="Wykonaj"
          name="B1"
          onclick="main();">
          <hr>
          <b>Wynik:</b>
          <div id="out">.</div>
        </form>
      </td>
    </tr>
  </table>
</div>

<script type=text/javascript
        language=javascript>

// Zliczanie wyrazów
// w łańcuchu tekstowym
// Data:  5.07.2008
// (C)2008 mgr Jerzy Wałaszek
//---------------------------

function main()
{
  var s,i,lw,n,c,t;

  s = document.frm
      .inp_s.value;
  n = s.length;
  t = false;
  lw = 0;
  for(i = 0; i < n; i++)
  {
    c = s.charAt (i);
    if(((c>= '0') &&
        (c <= '9')) ||
        (c == '_')  ||
        (c == '-')  ||
       ((c>= 'A')   &&
       (c <= 'Z'))  ||
       ((c>= 'a')   &&
        (c <= 'z')) ||
        (c == 'Ą')  ||
        (c == 'ą')  ||
        (c == 'Ć')  ||
        (c == 'ć')  ||
        (c == 'Ę')  ||
        (c == 'ę')  ||
        (c == 'Ł')  ||
        (c == 'ł')  ||
        (c == 'Ń')  ||
        (c == 'ń')  ||
        (c == 'Ó')  ||
        (c == 'ó')  ||
        (c == 'Ś')  ||
        (c == 'ś')  ||
        (c == 'Ź')  ||
        (c == 'ź')  ||
        (c == 'Ż')  ||
        (c == 'ż'))
    {
      if(!t)
      {
        t = true;
        lw++;
      }
    }
    else
      t = false;
  }
  
  document.getElementById("out")
  .innerHTML = lw;
}

</script>

  </body>
</html>
Zliczanie wyrazów w łańcuchu tekstowym
(C)2026 mgr Jerzy Wałaszek
Wprowadź tekst:
   

Wynik:
.

do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 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.