[C++] Zliczanie wyrazów w tekście

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
Enkidu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 139
Rejestracja: 10 wrz 2008, 12:10
Płeć: Mężczyzna
Wersja Ubuntu: 13.04
Środowisko graficzne: Unity
Architektura: x86_64

[C++] Zliczanie wyrazów w tekście

Post autor: Enkidu »

Cześć,

mam problem ze zliczeniem słów w tekście.

Dajmy na to mamy tekst:
W Szczebrzeszynie chrząszcz brzmi w czcinie.
A Szczebrzeszyn z tego słynie.
Jeśli użyję funkcji, która liczy spacje jako wyznaczniki nowego wyrazu, no to leżę w tym wypadku, bo po pierwszym zdaniu nie ma spacji, tylko enter.
Funkcja wygląda tak:

Kod: Zaznacz cały

TStringList *TForm1::Tokenize(String s,String delimiter)
{
TStringList *StringList;
int l; //length of s
int start,delimp;
String sub;
StringList = new TStringList();
start=0;
if (s.Pos(delimiter)>0)
{
delimp = s.Pos(delimiter);
do
{
l=s.Length();
sub=s.SubString(start,delimp-1);
if (sub != "") StringList->Add(sub);
s=s.SubString(delimp+1,l-delimp);
delimp = s.Pos(delimiter);
} while (delimp != 0);
StringList->Add(s); // dodanie tego co zostało na końcu
}
else StringList->Add(s);
return StringList;
}

Wywołanie natomiast tak:

Kod: Zaznacz cały

 TStringList *wyrazy = Tokenize(Zakladka->RichEdit->Text," ");

Pomożecie? :)
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Re: [C++] Zliczanie wyrazów w tekście

Post autor: Struchu »

Możesz najpierw podzielić tekst na wiersze (stosując jako separator znak nowej linii) a potem elementy listy, którą otrzymasz dzielić za pomocą spacji.
Awatar użytkownika
Enkidu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 139
Rejestracja: 10 wrz 2008, 12:10
Płeć: Mężczyzna
Wersja Ubuntu: 13.04
Środowisko graficzne: Unity
Architektura: x86_64

Re: [C++] Zliczanie wyrazów w tekście

Post autor: Enkidu »

Właśnie szukam jak zrobić, żeby przekształcić strumień w char. Bo napiszę pętlę for, żeby sprawdzić wszystkie znaki po kolei, dodam odpowiednie warunki i będę miał wyrazy.
Awatar użytkownika
Szmitas
Zakręcona Traszka
Zakręcona Traszka
Posty: 572
Rejestracja: 28 lis 2006, 17:38
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86
Lokalizacja: Luboń
Kontakt:

Re: [C++] Zliczanie wyrazów w tekście

Post autor: Szmitas »

Wrzucę tutaj strasznie stary kod, jak jeszcze zaczynałem klepać w C++ - zadanie ze spoja - dodatkowo zlicza liczby.

Kod: Zaznacz cały

#include<iostream>
#include<string>

using namespace std;

string slowo, nowe_slowo;
int slowa, liczby;

void sprawdz_slowo(string nowe_slowo)
{
int j;
for(j=0; j<nowe_slowo.length(); j++)
	{
		if((nowe_slowo[j] >= 'A' && nowe_slowo[j] <= 'Z') || (nowe_slowo[j] >= 'a' && nowe_slowo[j] <= 'z')) continue;
		else break;
	}
if(j==nowe_slowo.length()) slowa++;
}

void sprawdz_liczbe(string nowe_slowo)
{
int j;
for(j=0; j<nowe_slowo.length(); j++)
	{
		if(nowe_slowo[j] >= '0' && nowe_slowo[j] <= '9') continue;
		else break;
	}
if(j==nowe_slowo.length()) liczby++;
}

int main()
{
	while(getline(cin,slowo))
{
		slowo+=" ";
		for(int i=0; i<slowo.length(); i++)
			{
			if((slowo[i] != ' ') && (slowo[i] != '\n')) nowe_slowo+=slowo[i];
			else { sprawdz_slowo(nowe_slowo); sprawdz_liczbe(nowe_slowo); nowe_slowo.clear(); }
			}
cout<<liczby<<" "<<slowa<<endl;
liczby=0;
slowa=0;
}
}
www.ubuntu-pomoc.org - tutaj znajdziesz rozwiązanie każdego Twojego problemu.

Chcesz zostać Redaktorem ubuntu-pomoc.org? Skontaktuj się ze mną!
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: [C++] Zliczanie wyrazów w tekście

Post autor: beluosus »

Na necie jest sporo przykładów dzielących String na TStringList wg "delimitera". Poza tym w <cstring> jest funkcja "tokenizująca": strtok.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości