1

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

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

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

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

4

3 回答 3

5

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

请注意:如果字符串不是以空值结尾的,这种形式的测试可能会等待发生错误。

于 2012-04-09T01:16:19.767 回答
2

只是为了澄清@MitchWheat 的答案,如果用作条件的表达式仅指定一个值,例如if (x),那么它本质上等同于if (x != 0). 如果该值是一个指针类型,那么它等价于if (x != NULL)instead(尽管这并不是真正的“instead”,因为 NULL == 0)。

于 2012-04-09T02:34:25.993 回答
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*,而是一个字符串。所以这样编码是不合适的。

于 2012-04-09T02:40:43.450 回答