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