用另一个替换字符串中的一对字符
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;
};
我想用另一对替换一对字符。
例如,如果要用“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;
};