正如标题所说,如何用另一个字符串替换字符串?例如:用户将输入三个输入。第一个输入是程序将替换的字符串;第二个是替换input1的字符串;第三个是要打印出来的字符串。所以如果:
输入1 =花生
输入2 =椰子
输入3 =替换花生替换
输出:替换椰子替换
我已经开始了,但我的程序只能替换长度相同的单词。我试着搜索我的问题,但是我不理解给定的解决方案,因为我只是C / C ++的新手。
char replacing[100];
char replacement[100];
char original[1000];
int count;
cin >> replacing;
cin >> replacement;
while(! cin.eof())
{
cin >> original;
char * pch;
pch = strstr (original, replacing);
count = strlen(replacement);
strncpy (pch, replacement, count);
cout << original << endl;
}
答案 0 :(得分:1)
怎么样:
这是应该有用的东西:
bool replaceFirst(string& input, const std::string& toBeReplaced, const std::string& replacement) {
size_t start_pos = input.find(toBeReplaced);
if(start_pos == std::string::npos)
return false; //substring not found!
input.replace(start_pos, toBeReplaced.length(), replacement); //found. now i can replace!
return true;
}
由于您使用的是char数组而不是string
,因此必须确保替换不会导致您超出范围(字符串会自动调整大小)。
答案 1 :(得分:0)
关键问题是strncpy不会分配(或释放)任何内存。这意味着如果replacement
比replacing
短,replacing
的一部分将不会被覆盖。同样,如果replacement
更长,则会覆盖超出replacing
的结尾。
正如已经说过的,如果Qt是你的一杯茶,你最好使用std::string(或其他一些C ++字符串类,如Qt的QString。)
另外一件小事,一般来说对于溪流最好不要只检查eof
,而是写一些类似
while (cin >> original) {
如果流处于任何失败状态,这将终止,而不只是eof
。