Umlaute



  • Hallo wir müssen in der schule ein Programm schreiben das überprüft ob ein Wort vorwärts wie rückwärts gleich ist. Dazu sollen Großbuchstaben in KB umgewandelt werden. Das Programm funktioniert im großen und ganzen schon gut. was ich aber nicht hin bekommem ist das, wenn man ein umlaut eingibt das Programm einen Fehler ausgibt und dann fragen soll ob man es nochmal ausführen möchte.

    hier ist mein code:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    
    string wort;
    char kb[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','n','m','o','p','q','r','s','t','u','v','w','x','x','z'};
    char gb[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','N','M','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    char taste = 'j';
    
    while( taste == 'j' || taste == 'J') 
    {
    cout  << "Text = ? ";
    cin >> wort;
    
    	for(int i4 = 0;i4 < wort.length(); i4++)
    	{
    
    		for(int i5 = 0;i5 < 26; i5++)
    		{
    	  if (wort[i4] == gb[i5])
    		  wort[i4] = kb[i5];
    		}
    	}
    
    	int i = 0, i1 = wort.length() - 1;
    
    	 for( ; i <= i1 ; ++i, --i1) 
    	 {
    		if (wort[i1] != 'a' ||'b' ||'c' ||'d' ||'f' ||'g' ||'h' ||'i' ||'j' ||'k' ||'l' ||'m' ||'n' ||'o' ||'p' ||
    				       'q' ||'r' ||'s' ||'t' ||'u' ||'v' ||'w' ||'x' ||'y' ||'z')
    		{
    
    		if( wort[i] != wort[i1] )
    		{
    			break;
    		}
    
    	    }
    
    	 }
    
    	 if( i >= i1)					
    		 cout << "Text = ? " << wort << endl << " Das eingegebene Wort ist ein Palindrom." << endl;
    
    	 else
    		 cout << "Text = ? " << wort << endl << "Das eingegebene Wort ist kein Palindrom." << endl;
    		 cout << "\nWiederholen? (j/n) ";
    	 do
    		cin.get(taste);
    
    	 while(	taste != 'j' && taste != 'J'
    			 && taste != 'n' && taste != 'N');
    	        cin.sync();
    
    }
    
    system("PAUSE");
    }
    

    /edit pumuckl: cpp-Tags spendiert. Künftig bitte selber dran denken!



  • ichbines schrieb:

    ... überprüft ob ein Wort vorwärts wie rückwärts gleich ist.

    Dazu müssen die Worte sicher gleich lang sein. Du verwendest 2 Schleifen in der die innere bis 26 läuft ?

    Ich würde die Länge prüfen. Wenn die gleich ist reicht eine Schleife.

    ichbines schrieb:

    char kb[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','n','m','o','p','q','r','s','t','u','v','w','x','x','z'};
    char gb[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','N','M','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

    Wozu der Umstand mit den Arrays ? Das würde doch mit tolower() viel einfacher gehen ?

    ichbines schrieb:

    if (wort[i4] == gb[i5])
    wort[i4] = kb[i5];

    Das Originalwort zu verändern ist nicht sinnvoll. Der Vergleich würde z.B. mit tolower() ohne if() und Zuweisung direkt gehen.

    ichbines schrieb:

    was ich aber nicht hin bekommem ist das, wenn man ein umlaut eingibt das Programm einen Fehler ausgibt und dann fragen soll ob man es nochmal ausführen möchte.

    Deutsche Umlaute lassen sich doch auch gross und klein schreiben ?

    Was soll das sein ?

    ichbines schrieb:

    if (wort[i1] != 'a' ||'b' ||'c' ||'d' ||'f' ||'g' ||'h' ||'i' ||'j' ||'k' ||'l' ||'m' ||'n' ||'o' ||'p' || ....

    Wenn man wissen möchte ob wort[i] ein Buchstabe ist fragt man isalpha() oder
    einen seiner Brüder 😉



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x, bzw. C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten