Serwis Edukacyjny w I-LO w Tarnowie 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 |
ProblemNależy podzielić dany łańcuch tekstowy s na zawarte w nim słowa. |
Operacja podziału łańcucha znaków na zawarte w nim słowa (ang. splitting into words) jest często wykonywana jako wstęp do różnych algorytmów tekstowych.
W naszym prostym algorytmie w pętli będą wydobywane kolejne słowa z łańcucha s. Słowa te mogą być następnie odpowiednio przetworzone przez inny algorytm. Zasada pracy jest następująca:
Tworzymy pusty łańcuch ss, w którym będą gromadzone znaki wydobywanego słowa. Na końcu łańcucha s umieszczamy wartownika – dowolny znak nie będący literą ani cyfrą – może to być np. spacja. Wartownik zagwarantuje nam przetworzenie wszystkich słów łańcucha s. Następnie przeglądamy kolejne znaki łańcucha s. Jeśli przeglądany znak jest literą lub cyfrą, to dołączamy go do łańcucha ss. W przeciwnym razie, jeśli łańcuch ss zawiera znaki, przetwarzamy je jako słowo, po czym łańcuch ss zerujemy – będzie on gotowy na przyjęcie nowych znaków dla kolejnego słowa.
K01: ss ← "" ; zerujemy łańcuch słowa K02: s ← s+wartownik ; na końcu łańcucha s umieszczamy wartownika K03: Dla i = 0, 1, …, |s|-1: ; przeglądamy kolejne znaki łańcucha s wykonuj kroki K04…K09 K04: Jeśli s[i] = znak_słowa, ; litery i cyfry dołączamy to idź do kroku K09 ; do łańcucha ss K05: Jeśli ss = "", ; sprawdzamy, czy ss zawiera jakieś słowo to następny obieg pętli K03 K06: Przetwarzaj ss ; przetwarzamy wydobyte słowo K07: ss ← "" ; zerujemy ss dla następnego słowa K08: Następny obieg pętli K03 K09: ss ← ss+s[i] ; dołączamy znak s[i] do łańcucha ss K10: Zakończ
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 i wypisuje zawarte w nim słowa w klamerkach. |
Pascal// Podział łańcucha tekstowego na słowa // Data: 6.07.2008 // (C)2020 mgr Jerzy Wałaszek //------------------------------------- program prg; var s, ss : ansistring; i : integer; begin readln(s); ss := ''; s := s+' '; // dodajemy wartownika for i := 1 to length(s) do if s[i] in ['0'..'9', '_', '-', 'A'..'Z', 'a'..'z', 'Ą', 'ą', 'Ć', 'ć', 'Ę', 'ę', 'Ł', 'ł', 'Ń', 'ń', 'Ó', 'ó', 'Ś', 'ś', 'Ź', 'ź', 'Ż', 'ż'] then ss := ss+s[i] else if ss <> '' then begin writeln('[', ss, ']'); ss := ''; end; writeln; end. |
// Podział łańcucha tekstowego na słowa // Data: 6.07.2008 // (C)2020 mgr Jerzy Wałaszek //------------------------------------- #include <iostream> #include <string> using namespace std; int main() { string s, ss; int i, n; unsigned char c; getline(cin, s); ss = ""; s += " "; // dodajemy wartownika n = s.length(); 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)) ss += c; else if(ss != "") { cout << "[" << ss << "]\n"; ss = ""; } } return 0; } |
Basic' Podział łańcucha tekstowego na słowa ' Data: 6.07.2008 ' (C)2020 mgr Jerzy Wałaszek '------------------------------------- Dim As String s, ss Dim As Uinteger i, n, c Line Input s ss = "" s += " " 'dodajemy wartownika n = Len(s) 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 ss += Chr(c) Elseif ss <> "" Then Print "[";ss;"]" ss = "" End If Next Print End |
Python
(dodatek)# Podział łańcucha tekstowego na słowa # Data: 14.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" ss = "" s += " " # dodajemy wartownika for i in s: if x.find(i) >= 0: ss += i elif ss != "": print("[%s]" % ss) ss = "" print() print() |
Wynik: |
Człowiek nie lubi pracować, bo i po co miałby to robić? [Człowiek] [nie] [lubi] [pracować] [bo] [i] [po] [co] [miałby] [to] [robić] |
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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.