abfrage für gross und klein buchstaben im string



  • Hallo, habe mit C ein program geschrieben welches einen text im string speichert und mir die anzahl der gschriebenen zeichen ausgibt.

    nun möchte ich noch wissen wieviele gross und kleinbuchstaben sich in dem geschriebenen text befinden!

    das ganze sieht so aus :

    int i,j,k;
    //a=50;
    j=0;
    k=0;
    char text[50];

    cout<<"bitte geben sie ein text ein"<<endl;

    gets(text);

    cout<<"der eingebebene text war:"<<text<<"\n\n"<<endl;

    cout<<"der text hat folgende zeichen anzahl"<<" "<<(unsigned)strlen(text)<<endl;

    if (text[50]<='A' || text[50]>='Z')
    {
    j++;
    }

    if (text[50]<='a' || text[50]>='z')
    {
    k++;
    }

    cout<<"anzahl der grossbuchstaben:"<<" "<<j<<"\n"<<endl;
    cout<<"anzahl der kleinbuchstaben:"<<" "<<k<<"\n"<<endl;
    }

    Leider zählt das program j und k nicht hoch! kann mir jemand helfen wie ich dieses problem löse??

    Vielen dank!!!



  • #include <algorithm>
    #include <string>
    #include <iostream>
    #include <locale>
    
    bool uppcase(char c)
    {
        std::locale loc;
        return std::isupper(c, loc);
    }
    
    bool lowercase(char c)
    {
        std::locale loc;
        return std::islower(c, loc);
    }
    
    int main()
    {
        std::string input;
        //Einlesen
        std::getline(std::cin, input);
    
        //Ausgeben
        std::cout << "Input length: " << input.size() << std::endl;
        std::cout << "Uppercase letters: " << std::count_if(input.begin(), input.end(), uppcase) << std::endl;
        std::cout << "Lowercase letters: "  << std::count_if(input.begin(), input.end(), lowercase) << std::endl;
    }
    

    Hier werden die Funktionen beschrieben:
    string
    isupper
    islower
    getline
    count_if


  • Mod

    Um dein eigenes Programm auszubessern (das von Tachyon ist um so vieles besser und wenn's nur die Benutzung von std::string ist): Du brauchst da etwas schleifiges.

    edit: Wobei man Tachyon den Vorwurf machen könnte und sollte, dass er unnötigerweise 2x iteriert.



  • vielen dank euch beiden für eure hilfe, aber ich verstehe bei tachyon seinem programm nur bahnhof!!!!

    habe noch nicht so lange erfahrung mit programmiern und wollte das programm sehr einfach halten.

    könnt ihr mir trozdem nochmal zeigen wie ich das was ich geschrieben habe verbessern kann???

    mit der if bedingung müsste es doch möglich sein, oder?? ist halt das problem das es nicht hoch zählt.....habe es schon mit ner schleife versucht das prog zeigt mir aber trozdem das es nicht hochzählt....

    Vielen dank.



  • int i,j,k;
    	j=0;
    	k=0;
    	char text[50];
    
    	cout<<"bitte geben sie ein text ein"<<endl;
    	cin>>text;
    
    	cout<<"der eingebebene text war:"<<text<<"\n\n"<<endl;
    	cout<<"der text hat folgende zeichen anzahl"<<" "<<(unsigned)strlen(text)<<endl;
    
    	//hier muss ein Schleife kommen sonst klappt es nicht
    	for(int i = 0; i<strlen(text);i++){
    		if (text[i]>='A' && text[i]<='Z')
    		{
    			j++;
    		}
    		if (text[i]>='a' && text[i]<='z')
    		{
    			k++;
    		}
    	}
    	cout<<"anzahl der grossbuchstaben:"<<" "<<j<<"\n"<<endl;
    	cout<<"anzahl der kleinbuchstaben:"<<" "<<k<<"\n"<<endl;
    

    Das ist mal der Code dazu. Du hast viele Denkfehler gehabt und kannst es ja mit deinen Vergleichen 🙂

    Grüße



  • hey super danke!!! hatte es auch mal mit ner schleife versucht aber hatte die schleifen obergrenze mit text[50] angegeben. so ist es aber logisch!!!

    danke nochmal!!!!


Anmelden zum Antworten