何时这个for循环的条件会变为false?

时间:2012-04-09 01:15:19

标签: c++ logic

我正在研究我的C ++练习题,为即将到来的测试做准备,我正在努力解决以前从未见过的for循环问题。

        for (int i = 0; s[i]; i++)

从主要发送的字符串s"Two roofs to fix"

问题是for循环的条件何时会变为假?

3 个答案:

答案 0 :(得分:5)

当字符串终止为零'\0'时,循环条件变为false。 (if (0)评估为假)

请注意:如果字符串未终止,则此形式的测试可能会发生错误。

答案 1 :(得分:2)

为了澄清@ MitchWheat的答案,如果用作条件的表达式仅指定一个值,如if (x),则它基本上等同于if (x != 0)。如果值是一个指针类型,那么它相当于if (x != NULL)(虽然那不是真正的“反而”,因为NULL == 0)。

答案 2 :(得分:1)

#include<iostream>
#include<string>

using namespace std;

int main()
{
    string s = "Two roofs to fix";
    int i;
    for (i = 0; s[i]; i++);
    cout<<"i = "<<i<<endl;
}

我用上面的代码测试了这个问题。它返回错误“字符串下标超出范围”。因此,如果字符串s的长度是Len,则s [Len]是非法的。 在您的代码中,s不是指针char *,而是字符串。所以这样的代码是不合适的。