65,211
社区成员
发帖
与我相关
我的任务
分享#include<iostream>
#include<string>
#include<cctype>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
string s1("asdfasf,fas.sd"),s2;
string::size_type a,b;
b=0;
for(a=0;a<s1.size();a++)
{
if(!ispunct(s1[a]))
s2[b++]=s1[a];//这个地方为什么会有问题??谢谢
}
cout<<s2<<endl;
return 0;
}#include<iostream>
#include<string>
#include<cctype>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
string s1("asdfasf,fas.sd");
char s2[100];
string::size_type a,b;
b=0;
for(a=0;a<s1.size();a++)
{
if(!ispunct(s1[a]))
s2[b++]=s1[a];
}
s2[b]=0;
cout<<s2<<endl;
return 0;
}
这个不明白,是你没有理解string的实现
string的内部其实也是一个数组 但是这个数组是动态分配内存的
在你的第一种方法中,定义的s2 由于没有初始化 string内部就会分配一个字节 相当于定义了 char s[1]
在后面 你用数组的方式访问并赋值 s2[b++] b>0 时 会越界的 所以错了
建议看一下string的实现
ps: 如果你直接 s2=s1; 这种用法的话 string内部 会删除原有内存 并重新申请内存 所以不会有问题