#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 *t = new char[strlen(str)+1]; // 新建字符数组,用于存储替换后的字符串 char *a = t, *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 t; }这段代码怎么修改
时间: 2024-03-10 19:46:32 浏览: 65
使用include <iostream>时一定要加using namespace std
可以将 char 类型的数组替换为 string 类型,使用 string 的成员函数来进行字符串的操作,避免了潜在的内存越界问题。修改后的代码如下:
```
#include <iostream>
#include <string>
using namespace std;
string ReplaceString(string str, string s1, string s2);
int main() {
string str, s1, s2;
cin >> str >> s1 >> s2;
string result = ReplaceString(str, s1, s2);
cout << result << endl;
return 0;
}
string ReplaceString(string str, string s1, string s2) {
string::size_type pos = 0;
while ((pos = str.find(s1, pos)) != string::npos) {
str.replace(pos, s1.length(), s2);
pos += s2.length();
}
return str;
}
```
这个函数使用了 string::find 函数查找 s1 在 str 中的位置,使用 string::replace 函数进行替换,并且使用 string::npos 来判断查找失败的情况。
阅读全文