Testen ob ein String binär ist
-
Deine Abfrage
if ((*number)[i] == '1' || '2')
ist logisch falsch (genauer gesagt ergibt sie immertrue
;- ).
Du mußt die beiden Werte einzeln vergleichen (und mit||
verknüpfen):char c = (*number)[i]; if (c == '1' || c == '2') return true;
Außerdem ist deine
else
-Verzweigung logisch falsch. Überprüfe mal die Compiler-Warnungen (bzw. stelle sie an/höher)!PS: Warum übergibst du den String
number
als Zeiger???
PPS: Formatiere deinen Code hier in Code-Tags!!!
-
@DocShoe sagte in Testen ob ein String binär ist:
Du musst den Vergleich ausformulieren: if( *(number)[i] == '1' || *(number)[i] == '2').
Sinnvollerweise prüft man auch auf die richtigen Ziffern.
-
@DirkB
Ja, und man benutzt auch den richtigen logischen Operator, || ist hier auch falsch.
-
Ich kann den Code wegen der Scheiß, bzw. der Nicht-Formatierung nicht 100%ig lesen, aber ich habe den Eindruck, dass immer nur das erste Zeichen des Strings überprüft wird?!
Ich versteh auch
std::cout<<hfu::is_binary<<std::endl;
nicht, kompiliert das überhaupt?
-
@Belli sagte in Testen ob ein String binär ist:
Ich versteh auch
std::cout<<hfu::is_binary<<std::endl;
nicht, kompiliert das überhaupt?
Ja. hfs::is_binary ist ja ein Funktionszeiger. Sowas kann ja vielleicht in bool konvertiert werden - C++ ist immer wieder für Überraschungen gut, daher Warnungen anschalten (
-Wpointer-bool-conversion
)! Wäre ich spontan nicht drauf gekommen, dass das "1" ausgibt. Ich hätte gedacht, dass man da einen Zeigerwert sehen würde. Falsch gedacht...root [0] namespace hfs { bool is_binary(string*){return true;} } root [1] cout << hfs::is_binary << "\n"; ROOT_prompt_1:1:9: warning: address of function 'hfs::is_binary' will always evaluate to 'true' [-Wpointer-bool-conversion] cout << hfs::is_binary << "\n"; ~~ ^~~~~~~~~~~~~~ ROOT_prompt_1:1:9: note: prefix with the address-of operator to silence this warning cout << hfs::is_binary << "\n"; ^ & 1
-
Das gibt einfach die Adresse der Funktion aus.
-
@Th69 sagte in Testen ob ein String binär ist:
Das gibt einfach die Adresse der Funktion aus.
Eben nicht.
-
OK, es gibt hier nur die Umwandlung bei
cout
nachbool
, so daß1
(bzw.true
) ausgegeben wird. Es kompiliert aber, das wollte ich damit nur sagen!
Um die Adresse auszugeben ist ein expliziter Cast erforderlich:std::cout << reinterpret<const void *>(hfu::is_binary) << std::endl;
Edit:
@wob, habe jetzt erst deinen Post von gestern gesehen (der wurde mir bisher nicht angezeigt - liegt vllt. daran, daß ich diesen Beitrag als Tab die ganze Zeit offen hatte, aber normalerweise wird beiF5
doch alles aktualisiert?!?).Aber selbst mit Adressoperator (
&
) wird doch trotzdem immer diebool
-Konvertierung angewendet und1
ausgegeben. Kommt denn dann die Warnung wirklich nicht mehr?
-
Aber nochmal zu dem anderen Punkt:
Die Funktion wird doch nach Prüfung des ersten Zeichens verlassen?
-
Das hatte ich schon mit
@Th69 sagte in Testen ob ein String binär ist:Außerdem ist deine
else
-Verzweigung logisch falschangedeutet.