【问题标题】:When is the condition of this for loop will becomes false?这个 for 循环的条件什么时候会变为假?
【发布时间】:2012-04-09 01:15:19
【问题描述】:

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

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

从main发过来的字符串s"Two roofs to fix"

问题是什么时候for循环的条件会变成假?

【问题讨论】:

  • 提示:字符串"Two roofs to fix" 在字符串末尾有一个空终止符。在for 循环的第二个表达式中,您认为空终止符的计算结果是什么?
  • 那么你说的是在字符串之后它应该停止,因为它不能比正确的更进一步?
  • @Ali:字符串末尾的空终止符\0 的值为零,转换为false。
  • 这对我来说更有意义谢谢@Jesse

标签: c++ logic


【解决方案1】:

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

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

【讨论】:

  • -1:如果他知道字符串以 '\0' 结尾,我敢肯定他不会问这个问题。
  • @Nicol Bolas:期待看到你更“完整”的答案来证明你的反对票是合理的,否则我会很感激你删除反对票。
  • 根据@NicolBolas 的逻辑,回答 SO 问题的每个人都应该投反对票,因为 OP 不知道他们自己问题的答案!
  • @Marlon:应该注意的是,我回复的答案已经更改(直到 5 分钟宽限期之后才跟踪更改)变得更完整。他最初提到的只是循环将一直持续到\0 被击中,而不是解释字符串隐含地以这些结尾。
  • @Nicol Bolas:我发布的答案没有任何实质性变化。如果我选择发布部分答案然后充实它,那很好。很多人都这样做(甚至 Jon Skeet)你的反对票是完全没有道理的。但这是互联网....
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    #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*,而是一个字符串。所以这样编码是不合适的。

    【讨论】:

    • 他说的是字符串,但不清楚std::stringchar*。由于他没有提到任何错误,我假设它是char* s;
    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2014-12-26
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多