以下代码打印计数为0.但是s.length()是11所以不应该计算为10011?
int main() {
clock_t start_time = clock();
string s = "hello world";
int count = 0;
for (int i = -10000; i < s.length(); i++) {
count++;
}
cout << count << endl;
cout << clock() - start_time;
return 0;
}
答案 0 :(得分:0)
您正在遇到典型的已签名与未签名的比较失败问题 - 有关SO的常见问题之一(有关示例,请参阅Comparison operation on unsigned and signed integers)。
您可以通过切换到相等比较而不是关系比较来修复代码
for (int i = -10000; i != s.length(); i++)
或强制进行有符号整数比较
for (int i = -10000; i < (int) s.length(); i++)
(虽然在后一种情况下,你没有充分理由限制可能的长度范围)。
但总的来说,避免在比较中混合使用有符号和无符号类型是个好主意。重新设计代码以避免它。