我遇到了一个问题。如果你需要的话,这是代码:
#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);
也就是说,你还应该做一些其他的改变:
-
findthis
和sub
应声明为const
。 -
CCD_ 19和CCD_。
-
index
应该是std::string::size_type
而不是int
。 -
while (true) { std::getline(std::cin, input); ... }
应更改为:while (std::getline(std::cin, input)) { ... }
演示