Forum: PC-Programmierung c++ string splitten und ausgeben


von Michael R. (michir)


Lesenswert?

Hallo Forum,

da mir hier schon oft geholfen wurde wenn ich mich mal wieder an euch :)

Ich hab ein kleines Problem in c++ (Borland c builder)

Mir liegt ein String vor in der Form von z.b. "01X01......"

Die Punkte erscheinen in dem richtigen String als ne kombination aus 
zahlen die mir von nem Messumformer gesendet werden... z.b ne Temperatur 
oder so...

Nun möchte ich gern den empfangenen String auf die Kombination 01X01 
überprüfen. Wenn in dem String in den letzten 5 positionen das 01X01 
steht soll mir der rest von dem String in nem Label angezeigt werden.

Nun kam ich da in der Hilfe vom Borland auf die Funktion SubString (int 
Index, int count)...

klingt alles ganz logisch nur komm ich da mit irgendwie nich klar... die 
Funktion splittet also den String vom Anfang (index) bis zum gewählten 
Punkt (count)

testweise sieht das bei mir so aus:

String Test="01X010000022.5";

if(Test.SubString(Test.Length()-5,Test.Length())=="01X01")
 {
  lblTemp->Caption=Test.SubString(0,Test.Length()-5);
 }
 else
 {
  lblTemp->Caption="";
 }

das label zeigt mir halt nur nich das an was es machen soll :)

Wo liegt mein Denkfehler?

Danke schonmal für eure Hilfe

Lg

von Jean P. (fubu1000)


Lesenswert?

Hi,

> Nun möchte ich gern den empfangenen String auf die Kombination 01X01
> überprüfen. Wenn in dem String in den letzten 5 positionen das 01X01
> steht soll mir der rest von dem String in nem Label angezeigt werden.
>
> Nun kam ich da in der Hilfe vom Borland auf die Funktion SubString (int
> Index, int count)...
>
> klingt alles ganz logisch nur komm ich da mit irgendwie nich klar... die
> Funktion splittet also den String vom Anfang (index) bis zum gewählten
> Punkt (count)
>
> testweise sieht das bei mir so aus:
>
> String Test="01X010000022.5";

Hmmm. Oben sagste in den letzten 5 Stellen soll dein 01x01 stehen und 
weiter unten sieht es eher für mich so aus als würdest du sie in den 
ersten fünf Stellen erwarten ?


> if(Test.SubString(Test.Length()-5,Test.Length())=="01X01")

Du prüfst über die Länge des Strings Test.
Die SubString Funktion erwartet von Dir int index und int count. Also 
Anfangswert im String und Anzahl der Zeichen.
---> if(Test.SubString(Test.Length()-5 , 5) == "01X01")
könnte klappen.
Aber für mich sieht es eher so aus als würden diese Zeichen am Anfang 
stehen, also --> if(Test.SubString(0 , 5) == "01X01")

Gruß

von MichiR (Gast)


Lesenswert?

Mh stimmt auch irgendwie... hatte mich bissl an die binäre zählweise 
gehalten... da fängt man ja auch rechts mit 2^0 an... also müsste ich 
dann das ganze eher von linkjs anfangen... ich teste das mal :)

lg

von Arc N. (arc)


Lesenswert?

Jean Player schrieb:
>> if(Test.SubString(Test.Length()-5,Test.Length())=="01X01")
>
> Du prüfst über die Länge des Strings Test.
> Die SubString Funktion erwartet von Dir int index und int count. Also
> Anfangswert im String und Anzahl der Zeichen.
> ---> if(Test.SubString(Test.Length()-5 , 5) == "01X01")
> könnte klappen.
> Aber für mich sieht es eher so aus als würden diese Zeichen am Anfang
> stehen, also --> if(Test.SubString(0 , 5) == "01X01")
>
> Gruß

Vorsicht! Die VCL-Strings (AnsiString, WideString) sind nicht 
null-basiert d.h. die ersten fünf Zeichen erhält man mit 
str.SubString(1, 5)

von MichiR (Gast)


Lesenswert?

Wunderbar...

Hat alles geklappt :) Bedanke mich vielmals!

lg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.