有没有更简单的方法在C ++中的for循环中定义条件?

时间:2017-08-30 13:20:41

标签: c++ for-loop conditional-statements

考虑一个大小为10的数组arr[10]。在获取/显示数据时,我们使用以下常用语法的for循环

for(int i=0;i<10;i++)

如果是字符串,则类似于

for(int i=0;strlen(arr)>i;i++)

但我在某处读过像arr[i]这样简单的表达只能在条件的地方使用。我尝试过运行具有该条件的代码。但是我收到了一个错误。那么有一个类似的,简单的条件表达式可以与数组/字符串一起使用吗?

7 个答案:

答案 0 :(得分:7)

for statement文档中所述:

  

条件可能是声明

使用以下代码演示:

int main(){
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    for (int i = 0; int x = arr[i]; ++i){
        std::cout << x << std::endl;
    }
}

一旦arr[i]变为0,循环将退出并被分配到x,导致整个条件评估为false。为什么会有更详细的信息:

  

使用brace-or-equals初始值设定项声明单个变量。   在每次迭代之前评估初始化程序,如果是值   如果声明的变量转换为false,则退出循环。

答案 1 :(得分:7)

既然你说过simple和c ++,请使用std :: string。

>>> 49.52110

取自The Art of Readable Code帖子。

答案 2 :(得分:2)

是的,对于零终止的C字符串,您可以使用以下

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

因为循环在遇到nul-terminator时会停止。

这不适用于数组,仅适用于以零结尾的字符串。 (它也适用于由转换为false的东西终止的数组,但这是非常罕见的IMO。谢谢@FrançoisAndrieux)

答案 3 :(得分:0)

你可能想要这样的东西:

int main() {
  char arr[] = "Hello";

  for (int i = 0; char c = arr[i]; i++)
  {
    putc(c, stdout);
  }
}

输出

Hello
当yolu到达字符串的末尾时,

c = arr[i]将为0,因此循环将被终止。

BTW:for(int i = 0; strlen(arr) > i; i++)是正确但效率低下的。我让你找出为什么做练习。

答案 4 :(得分:0)

我不确定这是simplier,但它有点不同,适用于字符串,而不适用于其他泛型类型;

您可以使用array []检查字符串终结符

char array[10] = "hello";
for (int i = 0; array[i] != 0; i++) 
     myFunction(array[i]);

对于字符串,您可以使用指针算法

for (char *aPtr = array; *aPtr != 0; aPtr++)
    myFynction(*aPtr);

答案 5 :(得分:0)

我知道写这个:

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

写这个会节省几微秒:

int array_length = strlen (arr);
for(int i=0; i < array_length; i++)

我也意识到像第一个这样的结构在C中非常惯用,经验丰富的C程序员习惯于看到它们。

但是,在我看来,情况必须非常特别,因为保存几个周期比编写其他人很容易理解的代码更重要。作为一个在工作日中花费大量时间寻找其他人代码缺陷的人,我非常感谢表达性的编码实践。

答案 6 :(得分:-1)

你有很多选择但是调用strlen是最无效的选择(特别是如果按照显示的方式进行)。 arr必须是要递增的指针

while(*arr)
{
   /* do something */
   arr++;
}

while(arr[i])
{
   /* do something */
   i++;
}

do
{
   /* do something */
}while(*++arr);

do
{
   /* do something */
}while(arr[++i]);



for(;*arr;arr++) 
{
   /* do something */
}

do  // is you need to do somethingh with the trailing zero
{
   /* do something */
}while(*arr++);

do // is you need to do somethingh with the trailing zero
{
   /* do something */
}while(arr[i++]);

等等。