将文本流中一个字符串的所有匹配项替换为另一个字符串
Replace all occurrences of one string with another in a stream of text
正如标题所说,如何用另一个字符串替换一个字符串?例如:用户将输入三个输入。第一个输入是程序将替换的字符串;第二个是将替换输入 1 的字符串;第三个是要打印出来的字符串。因此,如果:
输入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;
}
怎么样:
- 首先找到(如果有(该字符串的出现
- 使用替换将匹配项替换为第二个字符串
这是应该有效的东西:
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
因此您必须确保替换不会导致您超出界限(字符串会自动为您调整大小(。
关键问题是strncpy不会分配(或释放(任何内存。这意味着如果replacement
比replacing
短,replacing
的一部分不会被覆盖。同样,如果replacement
更长,它将覆盖超过replacing
末尾。
如前所述,你最好使用 std::string(或者其他一些C++字符串类,如 Qt 的 QString,如果 Qt 是你的一杯茶(。
另一件小事,一般来说,对于流,最好不要只检查eof
,而是写一些类似的东西
while (cin >> original) {
如果流处于任何失败状态,这将终止,而不仅仅是eof
。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 使用另一个字符串从字符串中删除空格
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 如何在另一个字符串的x位置插入一个字符串?
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- C++:递归地将字符串中一个字母的所有实例替换为另一个字母
- 在另一个字符串中插入文件扩展名之前的字符串
- 使用C++将一个字符串替换为另一个字符串
- 将字符从一个字符串简单分配到另一个字符串不起作用
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将字符串中的单个单词替换为另一个单词
- 将文本流中一个字符串的所有匹配项替换为另一个字符串
- 无法将字符串用作另一个类的参数
- 另一个字符串文字,UDL 迷宫
- 在给定字符串上使用 tolower() 和 isalpha() 并将其输出设置为另一个字符串
- 如何使用循环从另一个字符串创建一个没有空格的新字符串