习题3.10 编一个程序,从string对象中去掉标点符号。要求输入程序的字符串必须含有标点符号,输出结果则是去掉标点符号后的string对象。
方法1,很笨,先判断string是否有标点,没有就循环。随后再做一个循环,滤掉标点符号,目的不出于这种不合理的做法,而是实验一下iterator对于动态增删改string字符成员的功能:
string s;
bool flag(true);
while(flag){
cout<<"\7请输入有标点符号的句子:"<<endl;
getline(cin,s);
for(string::size_type i =0;i<s.size();i++){
if(ispunct(s[i])){
flag = false;
break;
}
}
}
for(string::iterator iter = s.begin();iter<s.end();iter++){
if(ispunct(*iter)){
s.erase(iter);
}
}
cout<<s<<endl;
办法2,合理的做法,在判断是否含有标点时,就将句子内容滤掉标点记录下来:
string s,res;
bool flag(true);
while(flag){
cout<<"\7请输入有标点符号的句子:"<<endl;
res = "";
getline(cin,s);
for(string::size_type i =0;i<s.size();i++){
if(ispunct(s[i]))
flag = false;
else
res+=s[i];
}
}
cout<<res<<endl;