Probleme beim String-Vergleich (war: Wo ist hier der Fehler!!)
-
Ich wollt mir ne Funktion schreiben, mit der ich zwei Strings haargenau vergleichen kann.
Beim Aufruf dieser Funktion kommt immer ein Fehler ich würde eine Bereich überlaufen (ERangeError). Sieht von euch jemand den Fehler?
bool HardCompare(AnsiString &a,AnsiString &b) { a.Trim(); b.Trim(); if (a.Length()!=b.Length()) {return false;} else { for (int i=0;i<a.Length();i++) {if (a[i]!=b[i]) {return false;};}; }; return true; }Edit:
Bitte aussagekräftige Überschriften wählen. Danke!
-
Du hast hinter deiner else-Klammer ein ';' hingeschrieben.
Ist das so zulässig?
-
Der Fehler dürfte sein, daß AnsiStrings nicht ab 0, sondern ab 1 indiziert werden.
Nur so nebenbei, es gibt da die Funktion "bool operator == (const AnsiString&, const AnsiString&)", die genau das macht, was du willst

Edit: @Tobi3000: ja, ist es. Du kannst im Code so viele Semikola setzen, wie du willst - sind dann eben leere Anweisungen.
-
Hm hab ich auch versucht so zu machen, bloß als ich zB "km" mit "m" verglichen habe, hat der true zurückgegeben hmm. na ich schau nochmal nach. Danke schonmal
-
Jetzt hab ich das Problem gefunden, wenn ich "mm" mit "m" vergleiche wird true zurückgeben, ist das immer so, und kann ich das umgehen???
-
Hallo
Bei mm und m ist doch aber die Länge unterschiedlich.
chrische
-
nein ich meinte, wenn ich mit dem Operator von AnsiString vergleiche sprich:
AnsiString a="mm"; AnsiString b="m"; ->> (a==b) ist trueist das immer so?
-
??
Bei mir macht er das nicht. Zeig mal den Kontext, in dem das auftreten soll.
-
Also folgendes Problem:
Ich habe eine String mit Wert und Einheit, und den will ich zerlegen, und die Einheit herausbekommen.
valuestr ist der String mit Wert und Einheit
unitstrs ist ein Vector mit den einzelnen Einheiten die möglich sindint unitstart=valuestr.Length(); while ((unitstart>0)&&((valuestr[unitstart]<48)||(valuestr[unitstart]>57)))unitstart--; valueunit=valuestr.SubString((unitstart+1),valuestr.Length()-unitstart); valuestr=valuestr.SubString(1,unitstart); for(int i=(unitstrs.size()-1);i>=0;i--) { if (valueunit==unitstrs[i]) {unit=i;break;}; //hier hunzt irgendwas }; value=StrToFloatDef(valuestr,badvalues[0],formatsettings);
-
Hab den Fehler gefunden, und da es sich gehört, auch die Lösung hinzuschreiben:
in der Zeile
if (valueunit==unitstrs[i]) {unit=i;break;};muss ein Trim() hin, ansonsten hat man unerwünschte Leerzeichen, die den Vergleich unmöglich machen. Also:
if (valueunit.Trim()==unitstrs[i]) {unit=i;break;};Danke!