Zeichenfolge Temp ist gleich "ZERO: \ t.WORD \ t1" von meinem Debugger. (Die erste Zeile der Datei my)isalpha (<mychar>) == true ergibt false?
string temp = RemoveWhiteSpace(data);
int i = 0;
if (temp.length() > 0 && isalpha(temp[0]))
cout << "without true worked" << endl;
if (temp.length() > 0 && isalpha(temp[0]) == true)
cout << "with true worked" << endl;
Dies ist mein Code zu überprüfen, ob erste Zeichen Temp ist ein a-z, A-Z. Die erste if-Anweisung wird als wahr und die zweite als false ausgewertet. WARUM?!?!?! Ich habe das auch ohne die "temp.length()> 0 & &" versucht und es bewertet immer noch falsch. Es hasst nur das "== wahr". Das einzige, was mir einfällt, ist, dass isalpha() zurückgibt! = 0 und true == 1. Dann könntest du isalpha() == 2! = 1 bekommen. Aber ich habe keine Ahnung, ob C++ das ist ... seltsam.
BTW, ich brauche nicht zu wissen, dass die "== wahr" logisch sinnlos ist. Ich kenne.
Ausgang war
without true worked
mit Codeblock Zusammengestellt mit GNU GCC auf Ubuntu 9.10 (wenn dies zählt jede)
Haben Sie 'cout << isalpha (Temp [0]) << endl versucht,'? –
"Ich habe keine Ahnung, ob C++ das ist ... komisch". Ein Referenzhandbuch zu konsultieren würde Ihnen eine Idee geben. cplusplus.com sagt: "Ein Wert ungleich Null (d. h." wahr "), wenn tatsächlich * c * ein alphabetischer Buchstabe ist". Aus diesem Grund sollten Sie cplusplus.com nicht verwenden: "wahr" in C++ bedeutet nicht dasselbe wie "wahr" in der Beschreibung des C-Standards, von dem sie kopiert wurden. opengroup.org sagt: "Die isalpha() - Funktion soll nicht null zurückgeben, wenn c ein alphabetisches Zeichen ist", was ziemlich besser ist. –
Beachten Sie auch die Verwechslung dieser isalpha-Funktion von '' oder '' und die Funktionsschablone 'std :: isalpha' in' '. Letzteres gibt 'bool' zurück. Wenn Sie also anrufen würden, würde Ihr Code funktionieren. –