Funktion die einen Character in Text ändert



  • Hallo,

    bin gerade dabei für ein Programm eine Funktion zu schreiben die was einen Charackter von einem beliebigen Text ändern muss und den neuen Text mit dem neuen Character ausgibt. Der Charackter ist in meinem Fall ein '@', der was in einen '[at]' umgeändert werden muss.

    Also wenn der Text zB. : 'sdjf@djdf3-ß?@djf@-qwe' lautet,
    muss der neue Text : 'sdjf[at]djdf3-ß?[at]djf[at]-qwe' sein.

    Ich habe diese Funktion programmiert:
    char *search_char()
    {
    int count;
    char *char_1 = "@";
    char *char_2 = "[at]";
    char text[] = "as@fgoh@jkl";

    for(count=0; count<12; count++)
    {
    if(text[count]==*char_1)
    {
    char_1=char_2;
    printf("%s", char_1);
    }
    else
    {
    printf("%c", text[count]);
    }
    }
    return 0;
    }

    Das Problem ist dass Sie nur das erste '@' ändert und die weiteren '@' wieder gleich ausgibt. weiss nicht woran es liegen kann...

    Mfg





  • Benutze bitte [cpp][/cpp]-Tags.

    for(count=0; count<12; count++)
    

    Das bedeutet wohl er durchsucht nur die ersten 12 Zeichen. In deinem Beispiel 'sdjf@djdf3-ß?@djf@-qwe' wird das erste @ ersetzt, die weiteren @'s sind bei > 12. Wahrscheinlich möchtest du

    for(count=0; count<strlen(text); count++)
    

    Des weiteren finde ich deine Variablennamen verwirrend. Weder char_1 noch char_2 sind chars.

    char suchchar = '@';
    char *ersetzungsstring = "[at]";
    


  • Hallo nochmal, die Sache in dem ganzen ist ja dass ich die string.h bibliothek nicht benutzen darf.

    Im Grunde geht es darum; es handelt sich um ein Program das was einen beliebigen Text einliesst, dann 4 verschiedene Characktere (@, &, <, >) in 4 andere Strings umformt ([at], "&", ">", "<"). Dann zuerst den Originalen und nachher den neuen Text mit den modifizierten Characteren ausgibt.
    Ich wollte mal eine Funktion programmieren die was Charactere ändert und wollte probieren wie so was funktioniert.

    Zweitens wollt ich sagen dass der sogenannte (Probe)text "as@fgoh@jkl" ist und 11 charactere besitzt sodass mein counter bis 12 zählen und alle zeichen ausgeben kann.

    Wäre dankbar für die Hilfe

    Lg



  • Wenn du die Stringbibliothek nicht benutzen darfst schreibe dir die Funktionen selbst.

    int stringlength(char *s){
        int l;
        for (; *s; s++) i++;
        return l;
    }
    

    s ist der String, *s ist das Zeichen. Mit s++ (s = s + 1) gehst du ein Zeichen weiter. Das machst du so lange wie *s gilt. Da das letzte Zeichen ein '\0'-Zeichen ist bricht die Schleife ab.

    Genauso geht es mit char *stringcopy(char *text), nur dass du halt mit malloc Speicher für einen neuen String von stringlength(text+1) Zeichen Größe holst (+1 für das '\0'-Zeichen) und statt zu zählen das Zeichen in den neuen String schreibst.

    Edit: In deinem Fall kannst du auch einfach count<12 durch text[count] ersetzen und sparst dir dir Stringfunktionen.



  • nwp2 schrieb:

    Wenn du die Stringbibliothek nicht benutzen darfst schreibe dir die Funktionen selbst.

    int stringlength(char *s){
        int l;
        for (; *s; s++) i++;
        return l;
    }
    

    s ist der String, *s ist das Zeichen. Mit s++ (s = s + 1) gehst du ein Zeichen weiter. Das machst du so lange wie *s gilt. Da das letzte Zeichen ein '\0'-Zeichen ist bricht die Schleife ab.

    Genauso geht es mit char *stringcopy(char *text), nur dass du halt mit malloc Speicher für einen neuen String von stringlength(text+1) Zeichen Größe holst (+1 für das '\0'-Zeichen) und statt zu zählen das Zeichen in den neuen String schreibst.

    Edit: In deinem Fall kannst du auch einfach count<12 durch text[count] ersetzen und sparst dir dir Stringfunktionen.

    Da mach mal noch nen Edit dran oder benenne stringlength um in random_negative_stringlength_not_compilable.
    😃



  • Hmm, vielleicht sollte man mit l=0 starten und nicht i++ sondern l++ schreiben, aber das Prinzip sollte klar geworden sein.

    Edit: Big Brother, hör auf meinen Code auseinanderzunehmen und damit auch noch Recht zu haben. threeface hätte das schon gemerkt ^^



  • nwp2 schrieb:

    Hmm, vielleicht sollte man mit l=0 starten und nicht i++ sondern l++ schreiben, aber das Prinzip sollte klar geworden sein.

    l (oder i) muss zu anfang auch auf 0 gesetzt werden. einfach zu viele bugs für 'nen dreizeiler, mach doch so:

    int stringlength (char *s)
    {
        char *t = s;
        while (*s++);
        return (int)(s-t-1);
    }
    

    🙂


Anmelden zum Antworten