2017-11-18 2 views
3

Ich arbeite an einer Funktion, die Rekursion verwendet, um doppelte Zeichen in einer Zeichenfolge zu löschen. Das Problem ist, ich bin mir nicht sicher, wie ich eine Zeichenfolge weiterleiten soll, um benachbarte Zeichen zu vergleichen, ohne die Zeichenfolge irgendwie zu schneiden. Hier ist, was ich bisher:Wie lösche Duplikate in einer Zeichenfolge mit Rekursion?

string stringClean(const string& str) 
{ 
    string s1 = str; 

    if (/*first char == next char*/) 
     s1.at(/*first char*/) = ""; 
     return stringClean(s1); 
    else 
     return s1; 
} 

Als Beispiel stringClean ("yyzzza") sollte zurückgeben "Yza". Irgendwelche Tipps wie ich vorgehen soll?

+0

Sind die Duplikate immer benachbart? – 0x499602D2

+0

Ja. Andere Beispiele für erwartete Ergebnisse sind: – JURO312

+0

stringClean ("abbbcdd") → "abcd" stringClean ("Hallo") → "Helo" – JURO312

Antwort

1

C++

Hier ist, was ich dachte nur über

#include <iostream> 
#include <string> 

std::string rec(std::string &word, int index); 
std::string rec(std::string word) { 
    if(word.length() <= 1) { 
     return word; 
    } 
    return word[0] + rec(word, 1); 
} 

std::string rec(std::string &word, int index) { 
    if(index == word.length()) { 
     return ""; 
    } 
    return (word[index] != word[index-1] ? std::string(1, word[index]) : "") + rec(word, index+1); 
} 

int main() { 
    std::cout << rec("aaabbbbcccddd") << std::endl; 
} 

Für eine Zeile Rekursion Liebhaber:

std::string rec(std::string &word, int index) { 
    return index == word.length() ? "" : (word[index] != word[index-1] ? std::string(1, word[index]) : "") + rec(word, index+1); 
} 
+0

Schön. Ersetzen Sie jetzt Java durch C++, bitte ... – Fureeish

+0

Sie haben recht: ') – CMPS

Verwandte Themen