亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

它錯在哪里? 會提示如下錯誤:

它錯在哪里? 會提示如下錯誤:

C++
狐的傳說 2023-04-22 18:14:15
# 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(); ++iter)if(isupper(*iter)){iter = s.erase(iter);--iter;}return 0;}在Visual Studio 11.0 中運行上述程序目標是 刪除string字符串中的大寫字母
查看完整描述

2 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

if(isupper(*iter)){

iter = s.erase(iter);

--iter;

}
問題在這里 iter = s.erase(iter);
注意std::string 實際上里面是個動態 char[]
迭代器內部的內容實際是個char*

那么當erase后 數組長度發生變化

根據動態數組的概念 是不是會發生
char* new_p = new char[new_length];
memcpy(new_p, old_p, new_length);

那么原來的指針還能用嗎??

所以你這個功能應該使用 std::remove_if

同樣的 vector也不能使用這樣的操作

但是類似操作 list就可以。

查看完整回答
反對 回復 2023-04-25
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

試試這個

# 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;

}

查看完整回答
反對 回復 2023-04-25
  • 2 回答
  • 0 關注
  • 170 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號