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

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

C++字符串數組中的字符串長度與int數組內的數字比較之間的問題

C++字符串數組中的字符串長度與int數組內的數字比較之間的問題

C++
拉莫斯之舞 2018-07-20 13:23:29
任何一個新手都可以看懂的代碼,卻出現一個小學數學的bug,有哪位大神能告訴我為什么,我真的很惶恐int main(){     //freopen("in.txt","r",stdin);     int Max[2];     for(int i = 0 ; i< 2 ;i++){         Max[i] = -1;     }     string s[2][2];     cin>>s[0][0];     if(s[0][0].length()>Max[0]){         cout<<"string"<<s[0][0]<<"的長度"<<s[0][0].length()<<"大于"<<Max[0]<<"\n";     }     if(s[0][0].length()<Max[0]){         cout<<"string"<<s[0][0]<<"的長度"<<s[0][0].length()<<"小于"<<Max[0]<<"\n";     } }
查看完整描述

2 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

原因很簡單。
string類的length()函數的返回類型為size_type。而size_type被定義成無符號類型,通常就是unsigned int,具體的就得看操作系統。
而int默認是有符號類型。

所以下面這句:

 if(s[0][0].length()>Max[0])

實際上就是 大于號左邊為無符號數,右邊為有符號數。

C++里又有一條規則:當有符號數與無符號數放在一起運算時,總是都轉換成無符號數。所以啊,大于號右邊的-1被轉成了無符號數,那貌似就是最大無符號數了啊。大于號不成立就很正常了。

第一次回答問題,望采納。


查看完整回答
反對 回復 2018-07-23
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

size_type與unsigned int類型不匹配造成的。

查看完整回答
反對 回復 2018-07-23
  • 2 回答
  • 0 關注
  • 1124 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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