Announcement

Collapse
No announcement yet.

altes Beispiel: mysed

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new 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
    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*

    Comment


    • #3
      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.

      Comment


      • #4
        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.

        Comment


        • #5
          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
          I know what PC LOAD LETTER means

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

          Comment


          • #6
            jö! ein herzliches DANKE an euch!

            Comment


            • #7
              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 :-)

              Comment

              Working...
              X