编写递归字符串函数

时间:2015-03-11 02:47:58

标签: c++ string recursion

  

编写一个递归的,字符串值的函数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;
}

2 个答案:

答案 0 :(得分:3)

string sentence;
if(sentence[0] == " ")

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

答案 1 :(得分:0)

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