想法是先创建一个新的字符串,把原字符串非标点的字符赋值给新字符串。一开始写的错误代码是这样的
int main()
{
string s;
cout<<"请输出带标点的字符串:"<<endl;
cin>>s;
string::size_type index_new=0;
string s_new;
for(string::size_type index=0; index!=s.size();++index)
{
if(!(ispunct(s[index])))
{
s_new[index_new]=s[index];
++index_new;
}
}
cout<<s_new<<endl;
return 0;
}
这样会报错,原因是s_new这个string对象是空字符,长度为零。这个运算s_new[index_new]会报错。string对象虽然是能存储可变的字符串对象,但是上面这种赋值是不行的。可行的做法是用string 类的+运算,所以s_new[index_new]=s[index]; /应该改为s_new+=s[index];/正确的代码如下:
int main()
{
string s;
cout<<"请输出带标点的字符串:"<<endl;
cin>>s;
string::size_type index_new=0;
string s_new;
for(string::size_type index=0; index!=s.size();++index)
{
if(!(ispunct(s[index])))
{
s_new+=s[index];
++index_new;
}
}
cout<<s_new<<endl;
return 0;
}