Frage von Nenrel, 56

Buchstaben in Strings mit #define ersetzen (C++)?

Ich bin absoluter Neuling in C++ also entschuldigt meine Ungeschicktheit und die eventuell dumme Frage aber ich habe folgenden Code:

#include <iostream>
#define ä \x84
int main() {
    std::cout << "Wie alt bist du?" << std::endl;

    int alter;
    std::cin >> alter;      //speichert die Benutzereingabe in der Variable alter

    if (alter >= 18) {
        std::cout << "Du bist volljährig. " << std::endl;
    }
    else {
        std::cout << "Du bist nicht volljährig. " << std::endl;
    }

    system("pause");
}

Und möchte, dass alle "ä" im ganzen Code automatisch mit "\x84" ersetzt werden sodass auch in der Konsole ein "ä" angezeigt wird, bei meinem Code erscheint jedoch ein "õ", setze ich das "\x84" manuell ein kommt die richtige Ausgabe, also hab ich irgendwas mit dem #define falsch gemacht, könnte mir jemand helfen?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von TeeTier, Community-Experte für programmieren, 27

C++, Zeichensätze, Unicode und besonders die Konsole unter Windows sind eine schwierige Kombination. ><

Mit dem Thema werden ganze Kapitel gefüllt! :)

Ohne jetzt auf Details eingehen zu wollen, probier doch mal folgendes aus (möglich seit C++11; achte auf Compilersupport!):

cout << u8"Du bist vollj\u00E4hrig." << endl;

Das u8 direkt vor dem String-Literal zeigt an, dass dieser UTF-8 kodiert ist. Und da wir keine ISO-8859-X Kodierung verwenden, benutzen wir den Code-Point 0xE4 des Unicode-Zeichensatzes anstelle von 0x84. (In der kompilierten Binärdatei steht dann "vollj\xC3\xA4hrig", also 0x84 als UTF-8 kodiert!)

Falls das nicht klappt, kommst du nicht drum herum, dich genauer in das Thema einzulesen! Das Ganze ist einfach zu groß, um dir hier alles erklären zu können. Sorry!

Trotzdem viel Erfolg! :)

Antwort
von k3ltis, 33

Das wird wohl an dem "ä" liegen. So etwas ist als Präprozessordirektive meines Wissens nicht erlaubt.

Nachtrag: Abgesehen davon erstzt so eine Direktive nur DEFINES, die auch als Variablen im Code stehen... ein einzelner Buchstabe in eine String landet beim Kompilieren ganz woanders und wird nicht ersetzt...

Für dein Vorhaben, über das sich nur spekulieren lässt, wäre es sinnvoller, wenn du dich mit String-Encodings unter c++ beschäftigst. Ich empfehle UTF-8.

Kommentar von Nenrel ,

Danke für deine Antwort, bei diesem Code handelt es sich nur um einen Beispielcode der keinen wirklichen Nutzen hat außer mit der Sprache etwas mehr vertraut zu werden.

Antwort
von Mikkey, 35

Das funktioniert nicht auf diese Weise. Ein Text ist ein Text, darin wird nichts ersetzt.

Keine passende Antwort gefunden?

Fragen Sie die Community