编写递归字符串函数

Writing a recursive string function

本文关键字:函数 字符串 递归      更新时间:2023-10-16

编写一个递归的字符串值函数 replace,它接受一个字符串并返回一个由原始字符串组成的新字符串,每个空格都替换为星号 (*) 替换字符串中的空格涉及:

如果字符串为空则不执行任何操作

否则: 如果第一个字符不是空白,只需将其连接起来,替换字符串的其余部分即可

如果第一个字符为空白,则连接一个 *,以替换字符串的其余部分

这是我尝试过的:

string replace(string sentence){
    if(sentence.empty()) return sentence;
    string newString;
    if(sentence[0] == " ") {
      newString.append('*' + sentence.substr(1, sentence.length()));
    } else {
      newString.append(sentence.substr(1, sentence.length()));
    }
    return replace(newString);
}

但是测试代码正确答案的网站给了我以下错误:

CTest1.cpp:在函数 'std::string replace(std::string)' 中:

CTest1.cpp:9:错误:ISO C++禁止指针和整数之间的比较

请注意,错误中的行不一定与代码中的实际行相关。

有什么建议吗?

更新

使用以下代码解决了它:

string replace(string sentence){
    if(sentence.empty()) return sentence;
    string newString;
    if(sentence[0] == ' ') {
        newString.append("*" + replace(sentence.substr(1)));
    } else {
        newString.append(sentence[0] + replace(sentence.substr(1)));
    }
    return newString;
}
string sentence;
if(sentence[0] == " ")

" "不是单个字符,而是整个字符串。如果需要单个空白,请使用' '

  1. 在 if(句子[0] == " ") 中,句子 [0] 是一个字符(在比较过程中可以转换为其 ascii 值(整数)," " 是空字符串或指向空字符串中第一个字符的指针。这就是引发错误的原因。
  2. 而是做 if(句子[0] == ' ')。我也不确定C++,但在 java == 中检查引用的相等性。所以也要照顾好它。
  3. 此外,您还需要附加替换字符串其余部分的结果,而不仅仅是字符串的其余部分。为此编写一个递归函数