【问题标题】:C++ for condition string[i]用于条件字符串 [i] 的 C++
【发布时间】:2014-01-19 05:02:32
【问题描述】:

我在谷歌上找到了类似的东西:

for(int i=0;someString[i];++i){
    //code to do
}

但我不知道 someString[i] 是什么意思。它不应该是布尔表达式,那么编译器如何知道何时结束循环?也许这是一个微不足道的问题,但我对 c++ 很陌生。

谢谢转发

【问题讨论】:

  • someString 是如何声明的?除非您告诉(或我们猜测)如何回答,否则我们无法回答!
  • 根据 C 标准字符串终止是 \0 在使用 ASCII 或任何其他代码的情况下始终为零。 www-ee.eng.hawaii.edu/~tep/EE160/Book/chap7/…

标签: c++ string conditional-statements


【解决方案1】:

如果someString 是一个数组,其中包含可以转换为bool 的任何内容,则访问其元素将作为条件。例如,如果它是一个 char 数组,那么所有元素 bar '\0' 将计算为 true。例如:

#include <iostream>

int main()
{
  char someString[] = {'h', 'e', 'l', 'l', 'o', '\0'};
  std::cout << std::boolalpha;
  for (auto c : someString)
    std::cout << bool(c) << std::endl;
}

您的循环将在遇到第一个 falsy 元素时停止。

【讨论】:

  • 非常感谢,如果我到达字符串的末尾,它会是假的吗?
  • @horin 你不会为字符串中的最后一个元素(0)进入循环
  • @horin 如果someString 是一个以空字符结尾的字符串,是的。
【解决方案2】:

假设someStringchar*const char*,则此循环在到达终止NUL 字节时停止。

这是因为每个被称为 someString[i]char 都是一个数字,当且仅当它们为 0 时,数字才会转换为 false。NUL 为 0。

【讨论】:

    猜你喜欢
    • 2012-04-27
    • 2013-06-07
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2018-08-05
    • 2021-12-06
    相关资源
    最近更新 更多