无论在C++中是什么,撇号都会被解释为char



我遇到了一个问题。如果你需要的话,这是代码:

#include<iostream>
#include<string>
std::string findthis = "I'm";
std::string input;
int index;
std::string sub = "Hi";
int main() {
while (true) {
std::getline(std::cin, input);
if ((index = input.find(findthis)) != std::string::npos) {
input.replace(index, 2, sub);
std::cout << input << ", I'm dad!n";
}
}
}

是的,这是一个简单的爸爸机器人程序,但我正在学习C++中的搜索和替换。然而,如果我尝试执行代码,结果如下:

(me) I'm test
(output) Him test, I'm dad!

有什么办法解决这个问题吗?

"I'm"的长度为3个字符:I'm(仅供参考,您不需要在字符串文字中转义',只需要在字符文本中转义(。但是您告诉replace()只替换2个字符,而不是3个字符。因此,您将用H替换I,用i替换',但保持m不变。这就是为什么在输出中看到Him而不是Hi

你需要改变这个:

input.replace(index, 2, sub);

相反:

input.replace(index, findthis.size(), sub);


也就是说,你还应该做一些其他的改变:

  • findthissub应声明为const

  • CCD_ 19和CCD_。

  • index应该是std::string::size_type而不是int

  • while (true) { std::getline(std::cin, input); ... }
    应更改为:
    while (std::getline(std::cin, input)) { ... }

演示

相关内容

  • 没有找到相关文章

最新更新