Zeichen an einer bestimmten stelle in einem String auslesen [Anfänger]
-
for (i = 0; i == TF_Eingabe->Text.Length(); i++) { if (TF_Eingabe->Text[i] == ",") { Fehler = true; } } if (Fehler != true) { TF_Eingabe->Text = TF_Eingabe->Text + ","; } else ShowMessage("Es kann kein zweites Komma gesetzt werden!"); }
Der AnsiString beginnt grundsätzlich mit dem Index 1 und nicht wie std::string bei 0. Außerdem bietet auch der AnsiString die Methode SubStr um auf einzelne Zeichen zuzugreifen.
Und der AnsiString bietet sogar noch die Methode "Pos" an. Mit der kann man auf das erste Vorkommen eines bestimmten Zeichens bzw. Zeichenfolge prüfen.if(Eingabe->Text.Pos(",") > 0) { ShowMessage("Es kann kein zweites Komma gesetzt werden!"); }
-
"Funktioniert nicht" ist nicht aussagekräftig genug.
Deine ursprüngliche Fehlermeldung sollte jedenfalls mit Paules Hinweis behoben sein.Beachte ausserdem, dass bei AnsiString der Index nicht bei 0 sondern bei 1 beginnt.
/Edit: Ähh ja, genau.
-
1000 Dank an AnsiStr für diese Lösung
if(Eingabe->Text.Pos(",") > 0) { ShowMessage("Es kann kein zweites Komma gesetzt werden!"); }
nun läufts
mfg Zuluhutu
-
hätte man das nicht auch einfach mit:
String.substr(int,int) machen können ist doch viel einfacher
-
damit kannste aber nicht überprüfen ob ein "," irgendwo ist.
greetz KN4CK3R
-
Natürlich.
int size; int i; std::string teil; std::string text; text = Label1->Caption.c_str(); size = text.size(); while (i<size) { i++ teil = text.substr(i-1,1); if (teil == ",") { break; } }
vielleicht nicht elegant, aber es geht und ist unkompliziert.
-
also .Pos() sieht für mich einfacher aus...
greetz KN4CK3R
-
Tim06TR schrieb:
Natürlich.
int size; int i; std::string teil; std::string text; text = Label1->Caption.c_str(); size = text.size(); while (i<size) { i++ teil = text.substr(i-1,1); if (teil == ",") { break; } }
vielleicht nicht elegant, aber es geht und ist unkompliziert.
Es ist nicht nur nicht elegant. Es ist komplizierter Code.(nicht vom Verständniss her :D)
Die AnsiString Methode Pos erledigt genau das was gebraucht wird. Die
Suche im String.
Und für std::string gibt es find ...
-
Hallo
Zumal man nicht substr braucht um auf ein einzelnes Zeichen eines Strings zurückzugreifen. Denn deine Schleife greift ja auch nur auf ein Zeichen pro Durchgang zurück, da reicht es den []-Operator zu benutzen und das Ergebnis als char und nicht als char* zu betrachten.
bis bald
akari
-
Beispiel zu akari's Einwand:
for(int i= TF_Eingabe->Text.Length(); i > 0; i--){ if(TF_Eingabe->Text->Caption[i] == ','){ ShowMessage("Es kann kein zweites Komma gesetzt werden!"); return; // Click-Methode wird sofort verlassen, weitere Verarbeitung entfällt } } TF_Eingabe->Text= TF_Eingabe->Text + ",";
MfG