Suche nach der Stelle eines Buchstabens in einem char String



  • Dort steht doch dass du in Zeile 18 eine Variable namens str benutzt hast und der Compiler nicht weiß, was das sein soll, weil du es ihm nie gesagt hast. Es fehlt sowas wie int str oder char *str oder string str oder vielleicht wolltest du pString und nicht str.



  • Ok, das habe ich vor lauter lass mich auch mit übersehen, dass ich str nicht als Variable deklariert habe.

    Das, was mich halt am meisten verwundert, ist die Tatsache, dass strchr nicht akzeptiert wird, obwohl ich stio.h und cstring mit eingebunden habe. Weil im Beispiel auf C++ Reference stehen die beiden Bibliotheken auch im Beispiel und strchr und str sind ohne Murren akzeptiert worden. Ich habe es ja im Vorfeld getestet...

    Edit:

    Hier das von mir geteste Beispiel:

    #include <iostream>
    #include <stdio.h>
    #include <cstring>
    using namespace std;
    
    int main()
    {
    	char str[]="Das ist ein einfacher string";
    	char *pch;
    
    	cout << "Gesucht wird das 's' in " << str << "\n";
    
    	pch = strchr(str,'s');
    
    	while(pch!=NULL)
    	{
    		cout << "Gefunden an " << pch-str+1 << "\n";
    		pch = strchr(pch+1,'s');
    	}
    
    	return 0;
    }
    

    Und da ist auch nicht eine Variable namens str mit int oder mit char* angelegt worden und es wurde auch die Funktion strchr nicht rot unterringelt.

    Edit 2:

    Muss mich für das gerade geschriebene str entschuldigen. Das, was im Beispiel str ist, ist bei mir String .

    Für das, dass bei mir jedoch die Funktion strchr jedoch rot unterringelt ist, entschuldige ich mich jetzt nicht, da ich momentan wirklich nicht weiß, wo der Fehler ist.



  • silent_max schrieb:

    Und da ist auch nicht eine Variable namens str mit int oder mit char* angelegt worden und es wurde auch die Funktion strchr nicht rot unterringelt.

    Edit 2:

    Muss mich für das gerade geschriebene str entschuldigen. Das, was im Beispiel str ist, ist bei mir String .

    Für das, dass bei mir jedoch die Funktion strchr jedoch rot unterringelt ist, entschuldige ich mich jetzt nicht, da ich momentan wirklich nicht weiß, wo der Fehler ist.

    Worin unterscheiden sich die Aufrufe in den beiden Programmen?



  • manni66 schrieb:

    Worin unterscheiden sich die Aufrufe in den beiden Programmen?

    Ich sehe es im Moment nicht mehr...

    Ich habe gedacht, dass ich alles umgeändert hätte, was relevant ist, jedoch ist die Funktion strchr immer noch rot unterringelt...

    #include <iostream>
    #include <cstring>
    #include <stdio.h>
    using namespace std;
    
    int main()
    {
    	char String[10000];
    	char *pString;
    	char Buchstabe[3];
    
    	cout << "Geben Sie einen String von weniger als 10000 Buchstaben ein!\n";
    	gets(String);
    
    	cout << "Nach welchem Buchstaben soll gesucht werden?\n ";
    	gets(Buchstabe);
    
    	pString = strchr(String, Buchstabe);
    
    	while(pString!=NULL)
    	{
    		cout << "Gefunden an " << pString-String+1 << "\n";
    		pString = strchr(pString+1, Buchstabe);
    	}
    
    	return 0;
    }
    

    Zum Vergleich das Beispiel:

    #include <iostream>
    #include <stdio.h>
    #include <cstring>
    using namespace std;
    
    int main()
    {
    	char str[]="Das ist ein einfacher string";
    	char *pch;
    
    	cout << "Gesucht wird das 's' in " << str << "\n";
    
    	pch = strchr(str,'s');
    
    	while(pch!=NULL)
    	{
    		cout << "Gefunden an " << pch-str+1 << "\n";
    		pch = strchr(pch+1,'s');
    	}
    
    	return 0;
    }
    

    Edit:

    Wenn ich versuche, mit Buchstaben in Gewalt in einen int zu konvertieren, also wenn ich schreibe

    char Buchstabe[3]={static_cast<int> (Buchstabe)};
    

    dann bekomme ich die Meldung

    Error: Ungültige Typumwandlung
    


  • Nach Monaten und baffzig Erläuterungen machst Du immer noch den gleichen Mist:
    Du benutzt char-Arrays statt std::string und strchr (das ist eine C-Funktion), anstatt der entsprechenden Methoden aus std::string ...
    Mich erstaunt nur noch, dass es immer noch Leute gibt, die ernsthaft zu helfen versuchen ... ich jedenfalls gebe es auf.



  • @Belli:

    Schau Dir den Beitrag einmal an: http://www.c-plusplus.net/forum/312199

    Edit:

    Jetzt habe ich die Lösung doch noch alleine hin bekommen:

    #include <iostream>
    #include <cstring>
    #include <stdio.h>
    using namespace std;
    
    int main()
    {
    	char String[10000];
    	char *pString;
    	int Buchstabe = 97;
    	Buchstabe=static_cast<char> (Buchstabe);
    
    	cout << "Geben Sie einen String von weniger als 10000 Buchstaben ein!\n";
    	gets(String);
    
    	cout << "Nach welchem Buchstaben soll gesucht werden?\n ";
    	cin  >> Buchstabe;
    
    	pString = strchr(String, Buchstabe);
    
    	while(pString!=NULL)
    	{
    		cout << "Gefunden an " << pString-String+1 << "\n";
    		pString = strchr(pString+1, Buchstabe);
    	}
    
    	return 0;
    }
    

    Hat zwar bisschen gedauert, aber ihr wisst nicht wie gut das Erfolgserlebnis jetzt tut gut...



  • Und es ist immer noch erstaunlich, das du nicht den Unterschied zwischen einer einzelnen Variablen und einem Array kennst.
    Hättest du die Antworten aus dem von dir verlinktem Beitrag mal umgesetzt.



  • Schau den Edit an. Ich habe es doch noch hinbekommen.

    Edit:

    Sorry doch noch nicht.

    Edit 2:

    Hätte einer von euch einen letzten Tipp??

    Wenn ich jetzt schreibe

    int Buchstabe=static_cast<char> (Buchstabe);
    

    wird im Quelltext nichts mehr rot unterringelt, aber es kommt die Meldung, "Variable Buchstabe is used without initialized".

    Wie kann ich nun die Variable Buchstabe nun so initialisieren, damit ich doch Buchstaben eingeben kann?



  • silent_max schrieb:

    Wie kann ich nun die Variable Buchstabe nun so initialisieren, damit ich doch Buchstaben eingeben kann?

    Schmeiß Dein Lehrbuch weg und kauf Dir was gescheites, wenn Du so simple Lösungen wie

    char Buchstabe;
    

    nicht selber findest.

    mfg Martin



  • int Buchstabe = 97;
        Buchstabe=static_cast<char> (Buchstabe);
    

    ersetzen durch

    char Buchstabe;
    

    Du wolltest wohl irgendwie den Typ von "Buchstabe" ändern. Das geht so nicht wirklich.
    Btw, bei strchr steht zwar, das der zweite parameter ein int ist, aber eigentlich erwartet das Ding einen char. Gibt also keinen Grund deine Variable "Buchstabe zu einem int zu machen.


Anmelden zum Antworten