#include <iostream> #include <cstring> using namespace std; char *ReplaceString(char *str, char *s1, char *s2); int main() { char str[100], s1[10], s2[10]; cin >> str >> s1 >> s2; char *result = ReplaceString(str, s1, s2); cout << result << endl; return 0 ; } char *ReplaceString(char *str, char *s1, char *s2) { /********* Begin *********/ char *a,*b,*c; a=str; b=s1; c=s2; while(*str) { strtok(a,b); strcpy(b,c); } /********* End *********/ }这段代码怎么修改
时间: 2023-07-05 14:36:26 浏览: 88
这段代码存在一些问题,需要进行修改:
1. 在函数`ReplaceString`中,需要将替换后的字符串返回给主函数,因此需要定义一个新的字符数组,用于存储替换后的字符串,并在函数末尾将其返回。
2. 在`while`循环中,需要将`strtok`的返回值赋给`a`,否则`a`的值不会发生改变,导致替换失败。
3. 使用`strcpy`函数替换字符串时,需要先将目标字符串的长度扩展至源字符串的长度,否则会导致内存访问错误。
修改后的代码如下:
```
#include <iostream>
#include <cstring>
using namespace std;
char *ReplaceString(char *str, char *s1, char *s2);
int main() {
char str[100], s1[10], s2[10];
cin >> str >> s1 >> s2;
char *result = ReplaceString(str, s1, s2);
cout << result << endl;
delete[] result; // 释放内存
return 0;
}
char *ReplaceString(char *str, char *s1, char *s2) {
char *new_str = new char[strlen(str) + 1]; // 新建字符数组,用于存储替换后的字符串
char *a = new_str, *b = s1, *c = s2; // a指向新字符数组的起始位置
while (*str) {
char *p = strtok(str, b);
if (p != NULL) {
strcpy(a, p);
a += strlen(p);
strcpy(a, c);
a += strlen(c);
str += strlen(p) + strlen(b);
}
else {
strcpy(a, str);
break;
}
}
return new_str;
}
```
阅读全文