您的位置:首页 > 编程语言 > C语言/C++

c++字符串数组与字符串指针 c++ primer plus chapter 7 复习题8 的一点小问题

2015-04-08 20:12 501 查看
最近再看c++ primer plus ,做第7章复习题8时,发现自己写的与答案不一样,就顺便调试试了下,发现答案也是有问题的:

原题是:编写一个函数,把其中某一个字符都用另一个字符替换

贴出来代码,写起来还是很容易的

#include<iostream>

#include<string>

int replace(char str[],char c1,char c2);

using namespace std;

int main()

{
//char *wail="luualut";  //  @1
char wail[]="luualut";   // @2
cout<<wail<<endl;
int n=replace(wail,'u','c');
cout<<wail;
cin.get();

}

int replace(char *str,char c1,char c2)

{
int n=strlen(str);

int count=0;
for(int i=0;i<n;i++)
//while(*str)
{
if(*str==c1)
{
*str =c2;  //@3
count++;
}
str++;
}
return count;

}

函数声明的时候证实不论用字符串指针,或数组是一样的,当然这与书上的是一样的,但当主函数中用@1时 编译成功,运行就会出现写入错误,就会卡在@3处,找了很多说是指针指向空的等等,但都没有明白,也改不过来,后来看到http://blog.sina.com.cn/s/blog_4c70701801015n3t.html这篇博客才稍微明白点,声明指针字符串常量的时候,左边的变量是在栈中的,右边的字符串常量是在堆中,是不可更改的,所以当我们想更改里面的字符时就会出现写入错误,换成数组的定义方式,即@2的方式,就可以了,因为数组定义方式,左右都是在栈中,是可以修改的,更深的原因还是没理解太清,还有待继续学习。。。。。。

上面有两种循环方式,while明显简单更多,这应该就是思维差异,希望多锻炼,能有所提升。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 指针 string
相关文章推荐