Wörter zählen



  • Soll ein Satz mit max. 100 gültige Zeichen einlesen und die Anzahl der Wörter Ausgeben! Bsp. Eingabe: 1253 Hallo -> Ausgabe: 2

    Nun meine Frage: Wie kann ich die Wörter zählen???



  • Zähle die Leerzeichen.
    mit strtok geht das recht einfach.



  • Mit reinem Leerzeichen zählen gehts nicht,
    wenn da 2 Leerzeichen stehen wird 1 Wort zu viel gezählt,
    wenn führende Leerzeichen da sind ebenfalls.

    [edit]Ok ok ok 🤡 Ich hab mir mal strtok angeschaut O🤡[/edit]

    Hier ein kleinen Ausschnitt aus nem Proekt.
    Ist zwar mit Kanonen auf Spatzen geschossen aber... Naja. Vllt. bringts Dir ne Idee:

    #include <string>
    #include <list>
    #include <iostream>
    
    void trim(std::string & s,const std::string & trennzeichen = " ")
    {
    	s.erase(0,s.find_first_not_of(trennzeichen));
    	std::string::size_type pos;
    	pos = s.find_last_not_of(trennzeichen);
    	if(pos != std::string::npos)
    		s.erase(pos+1);
    
    }
    
    std::list<std::string> splitting(std::string tosplitt,const std::string & trennzeichen)
    {
    
    	std::string::size_type pos;
    	std::list<std::string> temp;
    
    	while((pos = tosplitt.find_first_of(trennzeichen)) != std::string::npos)
    	{
    		std::string toadd(tosplitt.substr(0,pos));
    		trim(toadd);
    		if(!toadd.empty())
    			temp.push_back(toadd);
    
    		tosplitt.erase(0,pos+1);
    	}
    	if(!tosplitt.empty())
    		temp.push_back(tosplitt);
    
    	return temp;
    }
    
    int main()
    {
    	std::string input;
    	std::cout<<"Geben Sie bitte einen Satz ein\n";
    	getline(std::cin,input);
    
    	std::list<std::string> woerter(splitting(input," "));
    
    	std::cout<<"Es wurden " << woerter.size()+1 << " Wörter eingegeben:\n";
    
    	int i = 1;
    	for(std::list<std::string>::iterator pos = woerter.begin();pos != woerter.end();++pos,++i)
    		std::cout<<i<<" "<<*pos<<"\n";
    
    	return 0;	
    }
    


  • Man koennte schon die Leerzeichen zaehlen und einfach pruefen, ob direkt auf
    ein gezaehltes Leerzeichen ein neues folgt, was dazu fuehren muesste, dass ein
    Counter nicht erhoeht wird.

    (Mit strtok ist das natuerlich eleganter)

    mfg
    v R



  • So, ich gebe jetzt auch mal meine Version ab:

    char string[]="..."; //hier gewört der Text rein
    char trennz[]=" \n"; //Leerzeichen und evtl, <ENTER>
    char *token; //Zeiger für die Teilstrings
    
    void main( void )
    {
       int i=0;
       token=strtok(string,trennz);
       while(token!=NULL)
       {
         i++
         token=strtok(NULL,trennz);
       }
       cout<<i<<" Woerter gefunden"<<endl;
    }
    


  • Also, ich würds so machen (Funktioniert bei mir einwandfrei):

    int count_words(char *string)
        {
        FILE *tmp = tmpfile();
        long int i;
        char sub[100];
    
        fprintf(tmp,"%s",string);
        fseek(tmp,0,SEEK_SET);
    
        i = 0;
        while (fscanf(tmp,"%s",&sub) != EOF) i++;
    
        fclose(tmp);
    
        return i;
        }
    

Anmelden zum Antworten