習題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;