string.length() problem
-
string maske="123456789012345678901234567890";
int zaehler = -1;
cout << maske.length() << endl; // ergebniss 30
while (zaehler<maske.length())
{in die while kommt er nie rein .. wenn ich zaehler mit 0 initialisiere dann ja .. wieso?
oder statt maske.length() eine beliebige grössere zahl als -1 setze.
-
Komisch ,müsste doch eigentlich klappen.
-
length gibt einen size_type zurück.. keinen int meines wissens.
wenn du nach int castet, müsste es im visual studio gehen.
while ( zaehler< (int) maske.length() )
-
@elise .. wenn ich aber "zaehler" nicht auf -1 sondern 0 setze gehts ja .. das ist das warum ichs net verstehe.
-
Wie elise schon sagte, gibt length einen size_t zurück, der unsigned ist. Da somit beim Vergleich im if-statement ein size_t und ein int beteiligt ist, wird der int nach size_t gecastet. Nun steht aber in zaehler (dem int) eine -1 und wenn dieser nach size_t (der unsigned ist) gecastet wird, ist das Ergebnis eine große Zahl. Deswegen kann der Vergelich im if-statement nicht wahr sein.
Wenn allerdings die Rückgabe von length() in einen int gecastet wird, was ohne Probleme möglich ist, sind am Vergleich zwei int's beteiligt und es wird wirklich gebrüft, ob -1 < maske-length() ist.
-
sofern makse.length() in einen int passt
-
Hi,
hast du es schon mal mit strlen() versucht.
x=strlen(Maske);
So wird in die Variable x die Länge des Strings eingetragen. Und so kannst du Sie auch abfragen.
Mfg
C++hecker
-
C++hecker schrieb:
x=strlen(Maske);
du meinst wohl
x=strlen(Maske.c_str());aber sowas ist ja eigentlich pervers.
-
Das Problem ist, daß size_t unsigned ist. Der in aber ein Vorzeichen hat. Da geht wohl irgenwo was verloren. Wahrscheinlich haste vom Compiler auch ne Warnung gekriegt, oder?
Wenn Du unbedingt einmal in die Schleife reinwillst könntest Du vielleicht auch überlgen do-while zu verwenden.
MfG Jester