首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ string 逆序迴圈死循環:size_type 為無符號數導致 i >= 0 永真

     編輯:程式設計疑難解答

錯誤代碼

for (string::size_type i = str.size() - 1; i >= 0; i--) {
    cout << str[i];
}

原因

string::size_type 為 size_t(無符號),i >= 0 永遠為真,i-- 下溢變巨大正數,無限循環。

三種修正寫法

1. 用有符號整數

for (int i = (int)str.size() - 1; i >= 0; i--) cout << str[i];

2. 反向迭代器

for (auto it = str.rbegin(); it != str.rend(); ++it) cout << *it;

3. 範圍 for + 索引技巧

for (size_t i = str.size(); i-- > 0; ) cout << str[i]; // i-- > 0 先比較後遞減,i=0 時執行體執行完後 i 變 SIZE_MAX 但循環結束

完整可執行範例

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str = "1234";
    for (size_t i = str.size(); i-- > 0; ) cout << str[i];
    cout << endl;
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved