Dies ist eine erweiterte Frage dieses: Is std::string suppose to have only Ascii charactersWie der Benutzer zwingen kann/O zur Eingabe von ASCII-String
Ich mag eine einfache Konsolenanwendung erstellen, die von dem Benutzer als Satz von Zeichen einen Eingang nehmen. Diese Zeichen umfassen 0->9
Ziffern und a->z
Buchstaben.
Ich beschäftige mich mit Eingabe unter der Annahme, dass es eine Ascii ist. Zum Beispiel verwende ich etwas wie: static_cast<unsigned int>(my_char - '0')
, um die Nummer als unsigned int
zu erhalten.
Wie kann ich diesen Code plattformübergreifend machen? Wie kann ich sagen, dass ich möchte, dass die Eingabe immer Ascii ist? Oder ich habe viele Konzepte verpasst und static_cast<unsigned int>(my_char - '0')
ist nur ein schlechter Weg?
P.S. In Ascii (mindestens) Ziffern haben Sequenz Reihenfolge. Bei anderen Kodierungen weiß ich nicht, ob sie es haben. (Ich bin mir ziemlich sicher, dass sie sind, aber es gibt keine Garantie, nicht wahr?)
[FYI] 'static_cast (my_char - '0')' funktioniert garantiert in allen Zeichensätzen, die C++ verwendet. –
NathanOliver
@NathanOliver mmm Ich vermutete das .. Allerdings war es nur ein Beispiel .. Ich werde noch eins hinzufügen. Danke –
@NathanOliver: Aber nicht in allen Zeichensätzen, die der Benutzer eingeben kann. In MOST-Zeichensätzen ist der ASCII-Zeichenbereich derselbe. Aber das stimmt nicht in ALLEN Zeichen. ZB verwendet EBCDIC nicht die gleichen "char" -Werte für ASCII-Nummern ("0" ist 0x30 in ASCII, aber ist 0xF0 in EBCDIC), und EBCDIC verwendet keine sequenziellen Bereiche für alle ASCII-Buchstaben. Sie müssen also den Eingabe-Zeichensatz bei der Verarbeitung berücksichtigen. 'std :: string' kennt nur' char' Werte, aber nicht was sie darstellen. –