用另一个替换字符串中的一对字符

Replacing a pair of characters in a string with another

我想用另一对替换一对字符。

例如,如果要用“57”替换“ax”并且字符串是“vksax”,它将给出“vks57”。

以这种方式尝试过,但得到了一个只有部分正确的奇怪输出:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   
char dummy;
int i;
char string[16];
scanf("%s", string);

for(i=0;string[i];i++){
  if(string[i] == 'a'  && string[i+1] == 'x'){
    string[i] = '5' ;
    string[i+1] = '7';
    i=0;  
  }
printf("%s", string) ;
}
   exit(0);
}

我不明白为什么它会给出,例如,输入 1234ax 输出 1234ax1234ax1234ax1234ax123457123457123457123457123457123457

for 循环内

for(i=0;string[i];i++){
  if(string[i] == 'a'  && string[i+1] == 'x'){
    string[i] = '5' ;
    string[i+1] = '7';
    i=0;  
  }

此声明

i=0;  

没有意义。去掉它。而不是

    string[i+1] = '7';

    string[++i] = '7';

并移动这个电话

printf("%s", string) ;

在 for 循环之外。

注意变量dummy声明了但没有使用

char dummy;

删除此声明。

并且使用 exit( 0 ); 代替 return 0; 没有什么意义。

scanf的调用写成

会更安全
scanf("%15s", string);

由于本题标注为C++,这里为C++单行答案:

#include <string>
std::string String = "vksax";
String.replace(String.find("ax"), 2, "57");

让自己熟悉 std::string https://www.cplusplus.com/reference/string/string/

作为函数的解决方案(假设要替换的子字符串和替换的长度相同):

std::string FindAndReplace(std::string sInputString, std::string sReplaceThis, std::string sReplacement)
{
    size_t iPos = sInputString.find(sReplaceThis);
    if(iPos == std::string::npos)
        return sInputString;

    sInputString.replace(iPos, sReplacement.length(), sReplacement);
    return sInputString;
};