Möglichkeit Wörter aus einer Liste zu zählen?

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
Woher ich das weiß:Studium / Ausbildung – siehe auch Computer

Du musst die Übergänge betrachten:

+1 wenn [leer] --> [nicht leer]

Woher ich das weiß:Berufserfahrung – Studium der Informatik + Softwareentwickler seit 25 Jahren.

Maximum12345 
Beitragsersteller
 16.11.2019, 18:59

Wie meinst du das?

0

Jedes mal, wenn auf einen Buchstaben ein Nicht-Buchstabe (oder das Zeilenende) folgt, endet ein Wort.

Dies kannst du zählen.


berndao2  16.11.2019, 18:58

Oder umgekehrt wenn auf ein nicht-buchstaben ein Buchstabe folgt, beginnt ein Wort.
wobei nichtbuchstabe dann { leerzeichen oder komma sein kann

0
Maximum12345 
Beitragsersteller
 16.11.2019, 18:58

und wie gehe ich da vor ohne, dass es massenweise in if Bedingungen ausartet?

0
gfntom  16.11.2019, 19:02
@Maximum12345

Mit einer Schleife. Du brauchst nur eine einzige if-Bedingung in dieser Schleife.

0
Maximum12345 
Beitragsersteller
 16.11.2019, 19:14
@gfntom

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++
}
0