Results 1 to 7 of 7

Thread: altes Beispiel: mysed

  1. #1
    Baccalaureus luna09's Avatar
    Join Date
    May 2009
    Location
    vienna
    Posts
    649
    Thanks
    56
    Thanked 103 Times in 66 Posts

    altes Beispiel: mysed

    Hallo allerseits,

    hat jemand eine Lösung des alten Beispiels Namens mysed ???
    Ich hänge gerade beim Algorithmus, der in einem String Teilstrings sucht und diese durch neue "Teilstrings" ersetzt.

    Das ist das letzte Beispiel, welches ich für die Testvorbereitung mache, leider hänge ich aber gerade bei dem am längsten :-(

    Für Anregungen/Hilfe/Code wäre ich sehr dankbar - auch via PM.

    LG,
    luna09

  2. #2
    Dipl.Ing Plantschkuh!'s Avatar
    Join Date
    Jun 2003
    Location
    mal hier, mal da
    Posts
    2,558
    Thanks
    350
    Thanked 469 Times in 301 Posts
    Ich kenn zwar die Angabe nicht, aber wenn die Übung noch immer mit C ist und einfache Teilstrings gesucht werden müssen, ist strstr dein Freund.

    Code:
    pos = strstr(grosser_string, teilstring);
    "Ersetzen" geht am besten, indem du eine neue Kopie machst (außer die Angabe schließt das aus, dann ist die Angabe doof). Die Länge des neuen Strings ist strlen(grosser_string) - strlen(teilstring) + strlen(ersatzstring), und addiere 1 für den null-Terminator.

    Der Rest ist Pointerarithmetik: In den neuen Buffer kopierst du zuerst die ersten pos - grosser_string Zeichen von grosser_string (strncpy!), daran anschließend den ersatzstring, und danach den Rest vom ursprünglichen String, der da an der Stelle pos + strlen(teilstring) beginnt.

    Alle Klarheiten beseitigt?
    *plantsch*

  3. The Following User Says Thank You to Plantschkuh! For This Useful Post:


  4. #3
    Super Moderator Kampi's Avatar
    Join Date
    Feb 2002
    Location
    Elysium
    Posts
    2,161
    Thanks
    256
    Thanked 619 Times in 348 Posts
    ja, die uebung ist in C (sogar C99 ), die angabe nicht doof, und sie schlaegt sogar strstr vor. darum hab ich mir auch beim antworten schwer getan weil der weg dann recht offensichtlich ist. also luna09, vielleicht koennen wir dir bei einer konkreteren frage helfen?
    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  5. #4
    Master
    Join Date
    Nov 2010
    Posts
    171
    Thanks
    146
    Thanked 33 Times in 21 Posts
    ich hab das jetzt mal so zu lösen probiert, wobei die Lösung funktioniert, aber wahrscheinlich keinen Eleganzpreis gewinnen wird ...

    Code:
    void read_and_replace(FILE *f, script *scripts, int script_count) {
    
      char *line;
    
      int length = 0;
      line = (char *) malloc(sizeof(char) * LINE);
    
      while (fgets(line, LINE, f) != NULL) { 
    
        for (int i = 0; i < script_count; i++) { 
    
          length = strlen(line) - strlen(scripts[i].old) + strlen(scripts[i].new) + 1;
          char *temp = (char *) malloc(sizeof(char) * length);
          char *pos = (char *) malloc(sizeof(char) * length);
          char *out = (char *) malloc(sizeof(char) * length);
    
          pos = strstr(line, scripts[i].old);
          while (pos != NULL) { 
            temp = strncpy(temp, line, strlen(line) - strlen(pos));
            temp = strcat(temp, scripts[i].new);
            out = strcat(out, temp);
            line = strcpy(line, pos + strlen(scripts[i].old));
            pos = strstr(line, scripts[i].old);
          } 
          out = strcat(out, line);
          line = strcpy(line, out);
        }
        fprintf(stdout, "%s", line);
      }
    }
    Würde mich über Hinweise freuen, wenn ich etwas gröber ungünstig gelöst habe.

  6. The Following User Says Thank You to testsieger For This Useful Post:


  7. #5
    Dipl.Ing Ravu al Hemio's Avatar
    Join Date
    Dec 2009
    Location
    einmal TU, immer TU
    Posts
    1,359
    Thanks
    77
    Thanked 605 Times in 433 Posts
    Ich fühle mich verpflichtet, diese Ehrenfrage ebenfalls zu beantworten.

    https://gist.github.com/2371810

    Wie viele Punkte ich dafür wohl beim Abgabegespräch bekommen hätte...?
    ~~ Ondra „Ravu al Hemio“ Hošek
    not an architect

    Tutor außer Dienst · OOP · OS · PK · PP

  8. The Following 2 Users Say Thank You to Ravu al Hemio For This Useful Post:


  9. #6
    Baccalaureus luna09's Avatar
    Join Date
    May 2009
    Location
    vienna
    Posts
    649
    Thanks
    56
    Thanked 103 Times in 66 Posts
    jö! ein herzliches DANKE an euch!

  10. #7
    Baccalaureus luna09's Avatar
    Join Date
    May 2009
    Location
    vienna
    Posts
    649
    Thanks
    56
    Thanked 103 Times in 66 Posts
    Quote Originally Posted by Kampi View Post
    .... beim antworten schwer getan weil der weg dann recht offensichtlich ist. also luna09, vielleicht koennen wir dir bei einer konkreteren frage helfen?
    DANKE - war jetzt eine Woche lang offline, deshalb jetzt mit Verspätung....

    Meine Frage hat sich eigentlich schon durch testsieger und Ravu gelöst...
    Ich hab mir etwas schwer getan beim Algorithmus zum eigentlichen "string-replace"... bin da leider etwas verwöhnt durch C# und ähnlichen Sprachen, die solch eine Methode schon mitliefern :-)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •