string (aus ANSI .txt mit Umlaut) mit string (von tastatur mit Umlaut) vergleichen



  • Ich bin an einem kleinen Programm, welches mir dabei helfen soll Spanischvokabeln zu lernen. Um diese richtig lernen zu können muss ich Akzente, n mit Tilde und umlaute richtig einlesen und schreiben können. Dazu hab ich schon gesehen gibt es den include <locale.h> mit der Funktion setlocale(LC_ALL, "German"). Zum ausschreiben und lesen funktioniert es an sich schon, aber irgendwas ist da faul. wenn ich nun aus einer Datei eine Zeile auslese in der eine Wort mit Umlaut drinnen ist und ich von der Tastatur das selbe Wort gleich geschrieben einlese und diese auf Gleichheit prüfe kommt heraus, dass sie ungleich sind. Wenn ich aber beide auf der Konsole ausgeben lasse kommt das selbe Wort raus. 😕
    Ich habe die Datei in der die Vokabeln sind in ANSI Format gespeichert. Damit funktioniert es noch am besten. Bei den anderen Formaten (UTF-8, UNICODE, ...) klappt es gar nicht, da sind die Umlaute nicht einmal richtig ausgeschrieben.

    Ich hab hier mal ein kurzes Codebeispiel:

    // main.cpp
    
    #include <locale.h>
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <array>
    
    using namespace std;
    
    int main()
    {
        setlocale(LC_ALL, "German");
    
        string inputUser;
        array<string, 2> inputFile;
    
        ifstream f;
        f.open("bspDeutsch.txt");
    
        getline(f, inputFile[0]);
    
        f.close();
        f.open("bspSpanisch.txt");
    
        getline(f, inputFile[1]);
    
        f.close();
    
        cout << "geben sie '" << inputFile[1] << "' auf Deutsch ein: ";
        cin >> inputUser;
    
        if(inputFile[0] == inputUser)
            cout << endl << "Richtig!" << endl;
        else
            cout << endl << "Falsch! Richtig ist: " << inputFile[0] << endl;
    
        return 0;
    }
    

    bspDeutsch.txt:

    Mädchen
    

    bspSpanisch.txt:

    chica
    

    Die Ausgabe müsste sein:

    geben sie 'chica' auf deutsch ein: Mädchen
    
    Richtig!
    

    Sie lautet aber:

    geben sie 'chica' auf deutsch ein: Mädchen
    
    Falsch! Richtig ist: Mädchen
    

    Wieso kommt da raus 'Falsch! [...]', und wie kann ich schaffen, dass der die strings richtig vergleichen kann?
    Ich hoffe jemand kann mir bei dem Problem helfen...

    MfG multipilz5 🙂



  • Ja, das ist leider in C++ alles nicht ganz einfach.

    Gib das eingelese Wort wieder aus. Was steht dann da?

    Wenn du nicht nur westeuropäische Sprachen verarbeiten willst, kommst du aber mit ANSI/ISO nicht mehr aus.



  • manni66 schrieb:

    Gib das eingelese Wort wieder aus. Was steht dann da?

    das hier: M"dchen

    manni66 schrieb:

    Wenn du nicht nur westeuropäische Sprachen verarbeiten willst, kommst du aber mit ANSI/ISO nicht mehr aus.

    muss ja nur mit Spanisch und Deutsch funktionieren



  • https://www.c-plusplus.net/forum/180307-full

    hab die Lösung gefunden 😃

    #include <Windows.h>
    
    int main()
    {
        SetConsoleCP(1252);
    
        [...]
    
        return 0;
    }
    


  • Jetzt bin ich ein mal kurz vom Debug zum Release gewechselt und wieder zurück, und plötzlich will es nicht mehr 😡 😞

    Genauer: Es Funktioniert jetzt mit den abfragen das ist alles ok, aber mit den ausgaben klappt es nicht mehr. mir wird immer noch gesagt dass das was ich eingebe richtig ist wenn ich es richtig geschrieben habe, aber es wird halt nicht mehr als ö ausgeschrieben wie eben noch.

    Ich habe gamacht: compile and run im debug (funktioniert) -> drücke auf release -> drücke auf debug -> drücke auf compile and run im debug (funktioniert nicht mehr) 😕

    Was ist da los???


Log in to reply