2 回答

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
if(isupper(*iter)){
iter = s.erase(iter);
--iter;
}
問(wèn)題在這里 iter = s.erase(iter);
注意std::string 實(shí)際上里面是個(gè)動(dòng)態(tài) char[]
迭代器內(nèi)部的內(nèi)容實(shí)際是個(gè)char*
那么當(dāng)erase后 數(shù)組長(zhǎng)度發(fā)生變化
根據(jù)動(dòng)態(tài)數(shù)組的概念 是不是會(huì)發(fā)生
char* new_p = new char[new_length];
memcpy(new_p, old_p, new_length);
那么原來(lái)的指針還能用嗎??
所以你這個(gè)功能應(yīng)該使用 std::remove_if
同樣的 vector也不能使用這樣的操作
但是類(lèi)似操作 list就可以。

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
試試這個(gè)
# include <iostream>
# include <string>
# include <cctype>
using namespace std;
int main()
{
string s("This is A example");
for(string::iterator iter = s.begin(); iter != s.end();)
if(isupper(*iter))
iter = s.erase(iter);
else
++iter;
cout<<s<<endl;
return 0;
}
- 2 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)