C++ 如何使用递归删除字符串中的重复项?

C++ 如何使用递归删除字符串中的重复项?,c++,string,recursion,C++,String,Recursion,我正在开发一个函数,它使用递归来删除字符串中的重复字符。问题是,我不知道如何继续传递字符串,以便在不剪切字符串的情况下继续比较相邻字符。以下是我目前掌握的情况: string stringClean(const string& str) { string s1 = str; if (/*first char == next char*/) s1.at(/*first char*/) = ""; return stringClean(s1); e

我正在开发一个函数,它使用递归来删除字符串中的重复字符。问题是,我不知道如何继续传递字符串,以便在不剪切字符串的情况下继续比较相邻字符。以下是我目前掌握的情况:

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

   if (/*first char == next char*/)
      s1.at(/*first char*/) = "";
      return stringClean(s1);
   else 
      return s1;
}
例如,stringClean(“yyzza”)应该返回“yza”。有关于我应该如何进行的提示吗

C++

这就是我刚才想的

#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;
}

算法:

  • 从最左边的字符开始,删除左角的重复字符(如果有)

  • 如果字符串的长度为零或一,则返回字符串

  • 检查起始子字符串中最左边的字符。如果有的话

    • 对于长度为n-1的字符串(没有最后一个字符的字符串)重复出现
  • 如果最左边的字符不在起始子字符串中,则

    • 对剩余字符串重复出现并存储唯一字符
实施:

#包括
#包括
使用名称空间std;
已移除的字符串(字符串s){
如果(s.length()>s;

复制品是否总是相邻的?是的。其他预期结果的例子有:stringClean(“abbbcdd”)→ “abcd”stringClean(“你好”)→ “Helo”
if(str[0]==str[1])返回str[0]+stringClean(str.substr(2));else返回str[0]+stringClean(str.substr(1));
终止条件留给读者作为练习。这个问题不是递归解决方案的好选择。这是家庭作业问题吗?在任何情况下,你都需要比要求“任何提示”更具体一些。”.正如所问,这个问题实际上需要一个关于如何编写递归函数的教程。请阅读。请特别注意#5-MCVE。然后发布一个显示更多努力的MCVE。如果您有
abcdcdcdbadcba
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); 
}