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;
    

Anmelden zum Antworten