習(xí)題3.10 編一個(gè)程序,從string對(duì)象中去掉標(biāo)點(diǎn)符號(hào)。要求輸入程序的字符串必須含有標(biāo)點(diǎn)符號(hào),輸出結(jié)果則是去掉標(biāo)點(diǎn)符號(hào)后的string對(duì)象。
方法1,很笨,先判斷string是否有標(biāo)點(diǎn),沒有就循環(huán)。隨后再做一個(gè)循環(huán),濾掉標(biāo)點(diǎn)符號(hào),目的不出于這種不合理的做法,而是實(shí)驗(yàn)一下iterator對(duì)于動(dòng)態(tài)增刪改string字符成員的功能:
string s;
bool flag(true);
while(flag){
cout<<"\7請(qǐng)輸入有標(biāo)點(diǎn)符號(hào)的句子:"<<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,合理的做法,在判斷是否含有標(biāo)點(diǎn)時(shí),就將句子內(nèi)容濾掉標(biāo)點(diǎn)記錄下來:
string s,res;
bool flag(true);
while(flag){
cout<<"\7請(qǐng)輸入有標(biāo)點(diǎn)符號(hào)的句子:"<<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;