Eine Frage



    1. Beim nächsten mal besseren Betreff ausdenken
    2. Code-Tags verwenden

    Weil eine Umwandlung von char nach char* implizit nicht möglich ist.

    char ist ein einzelnes Zeichen!

    #include <string>
    using namespace std;
    ...
    
    char Begruessung[3][20] = { "Hallo" , "Guten Tag", "Hi"}; 
    string Eingabe; 
    
    cin >> Eingabe; 
    
    do { 
       if(Eingabe == Begruessung[i]) { 
          t1=1; 
          break; 
       } 
       else 
          t1=0; 
       ++i; 
    } 
    while (i<maxBegruessung);
    


  • Gut, ich werde es mir merken.
    Danke für die rasche Antwort!

    Das klappt wunderbar, es ergibt sich jedoch ein weiteres Problem ->

    Wenn ich z.B. "Guten Tag" eingebe, dann sehe im im Debug Modus das in den String nur das Wort "Guten" aufgenommen wird.

    Wie kann ich es so machen, das auch mehrere Wörter in den String (also durch Leerzeichen getrennt) aufgenommen werden?

    2.
    Gibt es eine funktion, die alle Zeichen in einem String in Kleinbuchstaben umwandelt?

    mFG
    Damian



  • Wenn ich z.B. "Guten Tag" eingebe, dann sehe im im Debug Modus das in den String nur das Wort "Guten" aufgenommen wird.

    Wie kann ich es so machen, das auch mehrere Wörter in den String (also durch Leerzeichen getrennt) aufgenommen werden?

    ...
    string Eingabe; 
    
    getline (cin, Eingabe); 
    
    do { 
    ...
    

    Gibt es eine funktion, die alle Zeichen in einem String in Kleinbuchstaben umwandelt?

    Ne, da must du selber was basteln (basierend auf tolower(), welches ein einzelnes Zeichen in einen Kleinbuchstaben wandelt).



  • for (int i=0; i< signed (strlen (speicherchar)) ; i=i+1)
    {
    speicherchar[i]=toupper(speicherchar[i]); = ALLES GROSS
    speicherchar[i]=tolower(speicherchar[i]); = alles klein
    }



  • Gut vielen dank wieder 😉
    Super Forum!

    Das einzige was mich noch stört ist, dass 2 Zeilen eingelesen werden, anstatt einer. Ist das so normal?
    D.h. ich gebe das Wort ein, drücke ENTER und muss noch einmal ENTER drücken, jedoch liest er die 2te Zeile nicht ein 😮

    mFG
    DaMiNaToR

    @ tie123

    Auch danke! 😃



  • BTW, wir haben hier eine Suchfunktion. Damit hättest du schnell dieses Beispiel gefunden:

    #include <algorithm> 
    #include <cctype> 
    #include <string> 
    char myToUpper(char c) 
    { 
        return std::toupper(static_cast<unsigned char>(c)); 
    } 
    
    int main() 
    { 
        std::string s("Hallo"); 
        std::transform(s.begin(), s.end(), s.begin(), myToUpper); 
    }
    


  • Nur das mit den 2 Zeile. ist noch komisch. ≈



  • Du lässt das 'cin >> Eingabe;' jetzt aber weg, oder?



  • #include <iostream>
    #include <string>
    using namespace std;
    
    void main()
    
    {
    	const int maxBegruessung = 3;
    	char Begruessung[maxBegruessung][20] = { "Hallo" , "Guten Tag", "Hi"};
    	string Eingabe;
    	int i;
    	int t1;
    
    		i = 0;
    		t1=0;
    
    		cout << endl << "Test Programm" << endl << endl;
    
    		getline (cin, Eingabe); 
    
    		do
    		{
    			if(Eingabe == Begruessung[i])
    			{
    				t1=1;
    				break;
    			}
    			else
    				t1=0;
    
    			i++;
    		}
    		while(i<maxBegruessung);
    
    		if (t1==1)
    			cout << "Stimmt überein";
    		else
    			cout << "Stimmt NICHT überein";
    
    }
    

    Das ist der Abschnitt, lässt sich kompilieren.

    Könnt ihr mir sagen, ob bei euch auch 2 (!) Zeilen eingelesen werden?



  • MSVC++ 6.0 getline Method Patch
    Acknowledgements:
    This patch was originally brought to my attention by Dr. Mark Sebern.

    Instructions:
    Users of the string getline method in MSVC++ 6.0 are aware that it has some errors. The most obvious problem is that you may often have to use the <Enter> key more than once for the following code. This is not correct.
    string mystring;
    getline(cin,mystring,'\n');

    To correct this problem the header file which defines the string class needs to be updated. This can simply be done by replacing line 165
    which reads: _I.rdbuf()->snextc();
    with the following: _I.rdbuf()->sbumpc(); // Dinkumware patch MSOE

    The header file can be found at "..\Program Files\Microsoft Visual Studio\VC98\Include" (or equivalent).



  • BTW, void main ist nicht Standard. main muss int zurückgeben. (Ja, ich weiß, das der MSVC 6 das trotzdem zulässt.)



  • Jup, hätt nicht gedacht das der Compiler soar Bugs hatt 😉

    Danke!



  • Ich habe mir eben das neuste Service Pack 6 installiert, weil ich die die Stelle in der Datei (auch mit Suche nicht finden konnte).

    Ich habe die String Header (String.h) Datei durchsucht, da war sie aber nicht.

    Welche Datei ist gemeint?

    mFG
    DaMiNaToR™



  • Hallo,

    die Datei heisst nicht string.h sondern nur string 🙂

    mfg
    v R



  • Es tut mir leid, ich weis, das ich euch quäle 😉 , naja aber mein Kenntnisse sind noch bescheidend, aber eines Tages werde ich hier anderen vielleicht auch helfen können 👍 .

    Habe eine Zeit lang überlegt 😕 , aber der Compiler hatt immer etwas mit dieser "Konventierung".

    Ich will die Buchstaben-Kleinermachen als Funktion schreiben, ich habe es jetzt so:

    #include <iostream> 
    #include <string> 
    using namespace std; 
    
    void main() 
    
    { 
    
    	const int maxBegruessung = 3; 
        char Begruessung[maxBegruessung][20] = { "Hallo" , "Guten Tag", "Hi"}; 
        string Eingabe; 
        int i; 
        int t1; 
    
            i = 0; 
            t1=0; 
    
            cout << endl << "Test Programm" << endl << endl; 
    
            getline (cin, Eingabe); 
    
            do 
            { 
                if(Eingabe == Begruessung[i]) 
                { 
                    t1=1; 
                    break; 
                } 
                else 
                    t1=0; 
    
                i++; 
            } 
            while(i<maxBegruessung); 
    
            if (t1==1) 
    		{
    			cout << "Stimmt überein"; 
    		}
            else 
    		{
                cout << "Stimmt NICHT überein"; 
    		}
    
    }  
    
    string LowChars(string Eingabe)
    {
    
    		for (int i=0; i< signed (strlen (Eingabe)) ; i=i+1) 
    	{ 
    		//Eingabe[i]=toupper(Eingabe[i]); = ALLES GROSS 
    		Eingabe[i]=tolower(Eingabe[i]); 
    	} 
    
    return Eingabe;	
    }
    

    Aber ich darf irgendwie nicht string verwenden, char will er auch nicht akzeptieren ➡ HILFE 🤡

    mFG
    DaMiNaToR™



  • ein paar tips

    -schreibe int main, nicht void.

    -mach ein lieber array aus strings

    string begruessung[] = { "Foo", "Bar", "etc" };
    //größe: sizeof(begruessung)/sizeof(*begruessung)
    

    -verwende statt endl

    const char nl = '\n';
    cout << foo << nl;
    //statt deiens cout << endl << "Testprogramm" << endl << endl;
    //schreib also lieber
    cout << "\nTestprogramm\n\n";
    

    wenn du nicht weißt, was endl bewirkt.

    -definiere deine variablen nicht schon am anfang einer funktion, sondern exakt dann, wenn du sie brauchst.

    -inkludiere cctype für tolower, sicher ist sicher.
    oder inkludiere locale und verwende

    foo[i] = tolower(foo[i], locale());
    

    -strlen ist eine funktion, die nur auf zeiger auf const char arbeitet.
    die entsprechende funktion für std::strings ist size bzw. length, und das sind memberfunktionen

    for (unsigned i = 0; i < your_string.length(); ++i)
    

    das jetzt einmal allgemein.
    was jetzt noch auffällt ist, dass du eine funktion definierst, die du überhaupt gar nicht verwendest (nämlich LowChars).



  • Danke für die Tipps, habe sie jetzt alle beachtet!


Anmelden zum Antworten