2016-05-16 10 views
-3

Ich muss meine eigene Implementierung einer Funktion schreiben, die eine Zeichenfolge (word1) in einer anderen Zeichenfolge (Text) findet und alle Instanzen von word1 im Text durch eine dritte Zeichenfolge (word2) ersetzt. Das habe ich bisher;Implementierung der Funktion findAndReplace

void findandreplace(char text[],const char word1[], const char word2[]) 
{ 
    char *start; 
    char *end; 
    start=strstr(text,word1); 
    end=start; 
    if (strcmp(text,start)) 
    { 
     end+=strlen(word2); 
     strcpy(&text[end-start+1],&text[(int)start]); 
     strcpy(text,word2); 
     findandreplace(end,word1,word2); 
    } 
    if (!strcmp(text,start)) 
    { 
     end++; 
     findandreplace(end,word1,word2); 
    } 
    if (!text) 
    { 
     return; 
    } 
} 

Ich bin sicher, ich habe in schreibe viele Fehler gemacht, aber bitte beachten Sie bin ich im Wesentlichen eine komplette Noob. Jede Hilfe, die auf Fehler und mögliche Korrekturen hinweist, wäre sehr willkommen.

+2

Es würde viel helfen, wenn Sie Ihre Vertiefung Festsetzung beginnen würde. –

+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren Code * und * das Problem genau beschreiben. Soweit wir sehen können, haben Sie nicht versucht, Ihren Code auszuführen, und haben daher noch kein Problem für uns gelöst. – Prune

+0

http://Stackoverflow.com/a/35476087/971127 – BLUEPIXY

Antwort

0

Dieser Code funktioniert ordnungsgemäß. Beachten Sie, dass es word1 und word2 von gleicher Länge angenommen wird, daher ist es nur eine Idee, wie es getan werden könnte, nicht endgültige Lösung.

void findandreplace(char text[], const char word1[], const char word2[]) 
{ 
    if(strlen(word1) == strlen(word2) && 
     strcmp(word1, word2)) // The same lengths and words aren't equal to each other. 
    { 
     char *start; 
     // start=strstr(text, "good"); // We don't seek string "good", 
     start = strstr(text, word1); // but string word1[]. 
     while(start != NULL) 
     { 
      strncpy(start, word2, strlen(word2)); 
      start = strstr(text, word1); 
     } 
    } 
} 

Mit Bezug auf Ihren Code:

  • start Punkte String "gut" (falls vorhanden), aber Sie wollen für word1[] suchen.
  • text[(int)start] - Casting-Zeiger auf int macht keinen Sinn. Wenn Sie einen Index in text[] erhalten möchten, auf den start Punkte verweisen, müssen Sie die Zeigerarithmetik verwenden: text[start - text].
  • strcpy(text, word2) wird text[] eine tatsächliche Kopie word2 String machen, was Sie brauchen, ist strncpy(..)
Verwandte Themen