2016-10-16 3 views
-1

Mit der folgenden Funktion bin ich in der Lage, zwei Zeichenfolgen (char * ausblenden, char * Phrase) übergeben. Die * Phrase ist die gesamte Zeichenfolge und * hide ist, welche Wörter (können wiederholt werden) müssen zensiert werden, indem alle Buchstaben im Wort durch '*' ersetzt werden. Es funktioniert derzeit so, dass es fortfährt, den ersten Buchstaben des * hide zu finden, dann den zweiten Buchstaben des * hide Wortes, obwohl es nicht in der Zeichenkette z. B. nebeneinander ist.Verwenden von Strlen, um bestimmte Wörter in Zeichenfolge zu streichen

*phrase = 'hello my name is' 

*hide = 'lame' 

result = 'he*lo my n*** is' 

    { 
     int i, j=0; 
     int lengthPhrase = strlen(phrase); 
     int lengthCensor = strlen(hide); 
     for (i = 0; i < lengthPhrase; i++) { 
      if (phrase[i] == hide[j]) { 
       phrase[i] = '*'; 
       j++; 
       } 
      } 
     } 

Wo ist das Problem, so dass es richtig funktioniert, indem Sie die ganzen Wörter streichen ??

Vielen Dank für Ihre Zeit.

+2

Zwei Dinge: In C++ sind String-Literale konstante Arrays von Zeichen. Der Versuch, einen (über einen Zeiger) zu ändern, führt zu * undefiniertem Verhalten *. Die zweite Sache ist, dass wenn Sie wirklich in C++ programmieren, Sie 'std :: string' verwenden sollten, was das vorherige Problem löst. –

+0

Sie verwenden auch mehrstellige Literale aus Versehen. Vermutlich, weil Sie die Zeichenfolgenliteralzuordnung nicht zum Arbeiten bringen konnten, haben Sie die Dinge nach dem Zufallsprinzip geändert, bis sie kompiliert wurden. Leider wurde dieser Prozess der "Programmierung durch Raten" durch die Tatsache, dass das Endergebnis falsch ist, als schrecklich erwiesen. Welches Buch verwendest du um C++ zu lernen? –

+0

Verwenden Sie 'std :: search', um Übereinstimmungen für die Zielzeichenfolge zu finden. –

Antwort

0

Da ich nicht scheinen, um Ihre Frage zu verstehen, dachte ich eine Funktion für Sie, wenn dies zu sehen, was Sie suchen:

string phrase = "hello my name is" 

    string hide = "lame"  

    //strikeout function 
    void strikeout(string phrase, string hide) 
    { 
     for (int i = 0; i < hide.size(); i++) 
     { 
      for (int j = 0; j < phrase.size(); j++) 
      { 
       if (hide[i] == phrase[j]) 
       { 
        phrase[j] = '*'; 
       } 
      } 
     } 
     cout << phrase << endl; 
    } 

Output basierend auf Ihrem Testfall: „h *** o * yn *** ist "

Verwandte Themen