我的代码:
void simple();
/*
* Write a function that has this prototype
* int replace(char * str, char c1, char c2);
* Have the function replace every occurrence of c1 in the string str with c2, and
* have the function return the number of replacements it makes.
*/
int replace(char * str, char c1, char c2);
cSeven::cSeven() {
}
cSeven::~cSeven() {
}
void cSeven::show() {
exes();
}
void cSeven::exes() {
char * ch = "acbcccdc";
int occ = replace(ch, 'c', 'b');
cout << occ;
}
int replace(char * str, char c1, char c2) {
int cc = 0;
while (*str) {
if (*str == c1) {
cout<<*str<<endl;
*str = c2;
cout<<*str<<endl;
cc++;
}
str++;
}
return cc;
}
程序停在“* str = c2;”,我看不出它有什么问题。有人能说清楚吗?感谢
答案 0 :(得分:1)
您正在尝试修改字符串文字。你不被允许这样做。
你的编译器应该警告你关于这行
char * ch = "acbcccdc";
如果没有,则需要提高警告级别
用
替换该行char ch[] = "acbcccdc";
所以你要改变字符串的可变副本。
答案 1 :(得分:1)
你在这里声明了一个C风格的字符串:
char * ch = "acbcccdc";
作为参数传递给replace
函数。在其中,您尝试从行中的字符串修改字符:
*str = c2;
也是程序停止的地方。
标准在第2.14.5 / 12节中明确规定:
尝试修改字符串文字的效果未定义。
因此,您的程序行为未定义。
由于您使用的是C ++,而不是C,我建议使用std::string
代替。有了它你就可以避免这个以及许多其他问题。更不用说大多数代码看起来更干净了。只需查看std::string
函数的replace
对应部分:
int replace(std::string& str, char c1, char c2) {
int cc = std::count(str.begin(), str.end(), c1);
std::replace(str.begin(), str.end(), c1, c2);
return cc;
}