Noob Frage



  • Hallo erstmal,

    bin ganz neu und grade erst über das Forum gestolpert und hoffe das ich euch mit ein paar dusseligen Noob fragen nerven darf 🙂

    Ich versuche mich grade ein bisschen in C einzuarbeiten, normalerweise bin ich unter Linux in einigen Scriptsprachen zu Hause und möchte mich ein wenig bilden *lol*

    Zur Zeit möchte ich eine kleine funktion schreiben die einen substring ausschneiden soll aber ich bin zu dusselig dafür. Vieleicht kann mir ja einer erklären was ich falsch machen ??

    Hier mal mein Ansatz :

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    char substring(char *s,int start,int length) {
        int i;
        char sstring[length];
    
        for(i=start;i<=start+length-1;i++) {
            strcat(sstring,(s+i));
        }
    }
    
    int main(int argc, char *argv[]) {
            substring(argv[1],3,5);
            return(0);
    }
    

    Ist nur ein Auszug daher gibts im moment keine Rückgabe 🙂
    Achzoo kompiliert wird unter Linux mit nem gcc.

    Gruß und Dank

    Chris



  • Aua....

    Peinlich, Peinlich...

    Das das oben gar nicht funzen kann ist mir auch grade aufgegangen 😞 aber wie
    kann ich sowas realisieren ???

    Gruß

    Chris



  • Wieso benutzt du kein strstr()

    mfg jmnd__



  • Bin noch nicht so funktionsfest 🙂

    Aber ist strstr nicht nur um einen Teilsting in einem String zu suchen ???



  • Aber ist strstr nicht nur um einen Teilsting in einem String zu suchen ???

    Funktionen die einen neuen (dyn. allokierten) c-string zurückgeben sind ein wenig problematisch, da sie wieder freigegeben werden müssen, was häufig leider übersehen wird.

    Aber für deinen Fall ist es eig. kein Problem. Du weißt nach strstr() den Anfang (als charpointer), du weißt die Länge des Suchstrings, dann fehlt also nurnoch hein behrztes strncpy() ('\0' am ende noch reinstöpseln) und fertig.

    jmnd__



  • Danke Dir. Kann aber leider nicht so ganz folgen. Habe jetzt noch ein wenig in der <string.h> gestöber und dann so gemacht

    strncat(sstring,s+start,length);
    

    falls es aber besser oder noch einfacher? geht bin ich für tipps offen 🙂



  • Hoppalala hab ich glatt das Problem falsch verstanden/gelesen. Irgendetwas hat mich dazu verleitet anzunehmen, dass du einen Substring suchst und diesen dann in einen neuen String speichern willst. Sorry

    strncat(sstring,s+start,length);
    

    Kann krachen oder zu unerwarteten Ergebnissen führen, wenn es zum erstenmal ausgeführt wird und sstring[0] != '\0' ist.

    mfg jmnd__



  • Hi,

    string ausschneiden würd ich so machen:

    void LoescheSubstring(char *str, char *strzuviel){
    
        // Länge ermitteln, damit ausgeschnitten werden kann
        int lang=strlen(strzuviel);                           
    
        // den Teilstring suchen und die Adresse des ersten
        // Treffers in 'bereich' sichern.
        // Wenn nichts gefunden, dann weiter zum return und 
        // raus aus der Funktion
        if(char *bereich = strstr(str,strzuviel))          
    
            // Wenn was gefunden, den Rest der Zeichenkette durch kopieren der
            // einzelnen Buchstaben "heranziehen", der String, der zuviel ist
            // wird dabei überschrieben
            while ( *bereich=*(bereich+lang) )bereich++;
    
        // raus aus der Funktion;
        return;
    }
    

    wenn mehrere gleiche Teilstrings gelöscht werden sollen, dann kann man das 'if' durch ein 'while ersetzen.
    grüße Con@n


Anmelden zum Antworten