String aus String ausschneiden?
-
Hallo werte Gemeinde!
Ich möchte aus einem String einen String ausschneiden.
String1: "<Rob Type=\"KUKA\"> Dann folgt jede Menge Text </Rob> und ein Rest"
Den Rest will ich nicht! Also suche ich nach </Rob> und merke mir die Stelle, an der </Rob> zum ersten Mal auftaucht.
Dann kopiere ich den Inhalt von String1 bis einschließlich </Rob> in String2, welcher dann so aussehen sollte.
String2: "<Rob Type="KUKA"> Dann folgt jede Menge Text </Rob>"
Ich hab das was programmiert, jedoch kenn ich mich nicht so recht in der Materie aus.
int stelle = 0; char tag[]="</Rob>"; char buf[]="<Rob Type=\"KUKA\"> Dann folgt jede Menge Text </Rob> und ein Rest" char buf2[1024]; stelle = strstr(buf, tag); strncpy (buf2, buf, stelle + strlen(tag));
Was mache ich falsch? Ich weiß da gibts jetzt n Problem mit "stelle" da char* nicht in int konvertiert werden kann.
Gruß, Matze
-
Das gehört wohl eher ins Ansi C Forum.
char* stelle = 0; char tag[] = "</Rob>"; char buf[] = "<Rob Type=\"KUKA\"> Dann folgt jede Menge Text </Rob> und ein Rest"; char buf2[1024] = { 0 }; stelle = strstr(buf, tag); size_t len = stelle - buf + strlen(tag); strncpy(buf2, buf, len);
strstr(..) gibt einen char* auf das erste Zeichen des gesuchten Strings zurück. Keine Position als integer.
Simon
-
Es gibt auch fertige XML Parser für C/C++.
Sag jetzt aber bitte nicht, das Leute mit so wenig Ahnung wie du Software für KUKA Roboter schreiben.
-
lies doch mal die Manpage von man: strstr. Das gibt dir die Adresse zurück und keinen Offset!
in C++ kannst du es einfach so machen
std::copy(buf, stelle + sizeof(tag), buf2);
in C könntest du folgendes machen
size_t n = stelle - buf + sizeof(tag); memcpy(buf, buf2, n); buf2[n] = 0;