Zeichen ersetzen



  • Ich wollte ein Programm schreiben, welches Zeichen in einem String durch andere ersetzt.

    Mein Problem ist, dass ich zB @ durch [at] ersetzen will, aber nur ] ausgegeben wird (ist ja klar, weil Char nur 1 Byte hat).

    Kann mir jemand einen Tipp geben, wie ich das Problem lösen kann?

    http://codepad.org/u1gK31fY

    Bei meiner zweiten Version kommt immer "Segmentation fault
    "

    http://codepad.org/61Wf1vgJ

    mfg wertio





  • Ich komme trotzdem zu keiner Art von Lösung. Mein nächster Gedanke wäre, wen Text zu durchsuchen, bis auf das zu ersetzende Zeichen gestoßen wird.

    Dann den Text "weiterzuschieben", und in den "Zwischenraum" die neuen Zeichen einzufügen.

    Vll hilft das beim Verständniss

    abcdefghij@klmnopq
    abcdefghij@ klmnopq
    abcdefghij[at]klmnopq

    Wie kann ich das mit Pointern am besten realisieren?



  • Huhu,

    das Problem hast du anscheinend selbst herausgefunden.

    Du kannst nicht 5 Bytes einem armen char geben. Er wird sprichwörtlich platzen.

    Die Lösung hast du auch selber herausgefunden.

    Du gehst aber allgemein falsch vor, wenn du ein Zeichen mit einer Zeichenkette ersetzen willst, darfst du das nicht so machen:

    unsigned replace_char(char* string, char from, char to) /* 'to' nimmt max. nur ein Zeichen!!! */
    

    Sondern so:

    unsigned replace_char(char* string, char from, char* to) /* Schon besser :) */
    


  • Danke für die schnelle Antwort.

    unsigned replace_char(char* string, char from, char* to)
    

    ....

    char text[50] = "wert@wert>wert<wert&wert";
      unsigned result;
    
      result = replace_char(text, '@', ' [at] ');
      printf("%u : %s\n", result, text);
    

    Funktioniert leider noch immer nicht, oder mache ich etwas falsch (Falscher Gedankengang)

    Wenn es hilft kann ich den Ganzen Quelltext posten



  • Huhu,

    was mir gerade aufgefallen ist:

    Du schreibst...

    result = replace_char(text, '@', ' [at] ') /* Das sind Grundlagen. Kapitel Strings! */
    

    Mit ' ' in den Hochkommata kann nur ein Zeichen rein!
    Wenn du eine Zeichenkette haben willst, musst du die Anführungszeichen benutzen " "

    char* str = "Hallo mein Name ist ..." ; /* Zeichenkette */
    char c = '\n' ; /* 1 Byte*/
    char c = "x" /* 2 Bytes, x + 0-Byte ( FALSCH! ) */
    

    Wenn du das verstehst, fällt dir die Umsetzung deines Plans nicht schwer.

    Nimm das bitte nicht in den falschen Hals, aber schau dir nochmal das Kapitel Strings an. Könnte hilfreich sein, vielleicht erweiterst du dein Wissen --> Schadet nie (:



  • Mach doch den anderen Parameter auch als char* dann bist du mit deiner replace Funktion flexibler.

    // Mögliche Funktionsweise:
    // Ersetzt alle a in s durch b.
    // Gibt eine neue Zeichenkette zurück, wenn a mindestens einmal vorkommt.
    // Kommt a nicht vor, wird s zurückgegeben.
    // Ist b == NULL, werden alle Vorkommen von a gelöscht.
    // Ist b == NULL und es bleibt von s nichts mehr übrig, wird NULL zurückgegeben.
    char* replace ( char* s, char* a, char* b );
    


  • alles hirnsteine



  • wertio schrieb:

    Funktioniert leider noch immer nicht, oder mache ich etwas falsch (Falscher Gedankengang)

    klick auf den link von nwp2 und dann auf den auf der ersten seite.
    🙂


Anmelden zum Antworten