Möglichkeit Wörter aus einer Liste zu zählen?
Wie kann man Wörter aus einem String in C zählen wenn beliebig viele Leerzeichen in diesem String verwendet werden können? Also zum Beispiel
{ hallo, rot, blau, grün,lila}
Wie zähle ich da jetzt die Wörter? Hätte es geplant gehabt, dass ich einfach mit der Anzahl der Leerzeichen umrechnen kann, aber das ist ja nicht möglich wenn die Anzahl der Leerzeichen beliebig verändert werden kann?
4 Antworten
Ich würde einfach drüberlaufen und dabei jeden Wortanfang mitzählen:
#include <ctype>
int countwords ( char const *str )
{
int words = 0;
while ( *str )
{
while ( !isalnum(*str) )
++str; // skip delimiters
if ( *str ) // new word starts
{
++words;
while ( isalnum(*str++) ); // rest of word
}
}
return words;
}
Wenn Du nicht festmachen kannst, welches Trennungszeichen verwendet wird, - gar nicht. Diese Aufgabe ist unlösbar.
Als Näherungswert würde ich dies tun
- kopiere den Text in eine Zwischenspeicher
- suche nach isolierten Klammern wie vor hallo und ersetze sie durch einen Stern
- ersetze alle Beistriche und Leerzeichen durch einen Stern
- ersetze alle Sternengruppen, egal, wie viele es sind durch ein Sonderzeichen, das selten ist
- zähle dieses Sonderzeichen
Du musst die Übergänge betrachten:
+1 wenn [leer] --> [nicht leer]
Jedes mal, wenn auf einen Buchstaben ein Nicht-Buchstabe (oder das Zeilenende) folgt, endet ein Wort.
Dies kannst du zählen.
Mit einer Schleife. Du brauchst nur eine einzige if-Bedingung in dieser Schleife.
Hast dus so gemeint?
char *elements;
/*kann beliebig lang sein -> ich lass den String jetzt mal leer*/
int i = 0;
countWords = 0;
while(!"/n") //bis zum Zeilenende
{
if(((elements[i] > 64 && elements[i] < 91) || (elements[i] > 96 && elements[i] < 123)) && (elements[i+1] == 32 || elements[i+1] == "/n"))
{
countWords++;
}
/* Das ist mega unübersichtlich, aber so hast du gemeint oder?
i++
}
Oder umgekehrt wenn auf ein nicht-buchstaben ein Buchstabe folgt, beginnt ein Wort.
wobei nichtbuchstabe dann { leerzeichen oder komma sein kann
und wie gehe ich da vor ohne, dass es massenweise in if Bedingungen ausartet?