【发布时间】:2020-03-21 15:52:28
【问题描述】:
我正在解决一个问题,我需要在给定字符串中返回“1”的最后一个索引。如果不存在则返回-1。我写了下面的简单代码,但是对于输入字符串输入“0”它失败了。我尝试使用 GDB 调试 bu,我注意到一旦 index() 函数的循环语句运行一次,就会将垃圾值分配给迭代变量 i。
#include <iostream>
#include <string>
using namespace std;
int index(string &str) {
int result = -1;
for(auto i = str.length() - 1; i >= 0; --i) {
if(str[i] == '1')
return i;
}
return result;
}
int main() {
int T;
cin >> T;
cin.ignore();
while(T--) {
string str;
cin >> str;
cout << index(str) << endl;
}
return 0;
}
究竟是什么问题?
【问题讨论】:
-
i是size_t类型,它是无符号的。它下溢。 -
@HolyBlackCat 这怎么可能? OP 一直在循环,直到它
-
@Chipste 不,他们一直在循环,直到它 i。
-
你的截图真的很难看。您应该在此处发布时复制并粘贴您的 shell 会话的文本。