【问题标题】:Iterate through an array of characters in C遍历C中的字符数组
【发布时间】:2020-09-19 17:19:21
【问题描述】:

最近我在下面的示例中看到了 C 中的这个 while 循环条件,但我不知道 while 条件的真正含义以及编译器如何知道它何时完成。谁能给我解释一下?

这就是我认为的意思:while 循环遍历 char 数组,直到数组结束,因为没有别的东西然后 while 循环结束,还是我错了?我尝试使用相同的 while 循环,但使用另一种语言(例如 Go),但是编译器抛出错误说我不能使用非布尔值。

// C program to demonstrate 
// example of tolower() function. 

#include <ctype.h> 
#include <stdio.h> 

int main() 
{ 
    int j = 0; 
    char str[] = "GEEKSFORGEEKS\n"; 

    // Character to be converted to lowercase 
    char ch = 'G'; 

    // convert ch to lowercase using toLower() 
    char ch; 

    while (str[j]) { // <- this part, how is this a condition?
        ch = str[j]; 

        // convert ch to lowercase using toLower() 
        putchar(tolower(ch)); 

        j++; 
    } 

    return 0; 
} 

【问题讨论】:

    标签: c while-loop iteration null-character


    【解决方案1】:

    while 循环可以理解为“while this string has characters”,并且在 C 字符串或字符数组中已知包含一个 '\0' => Null 字符,最后,一旦 while 循环实现它,它将停止迭代。

    是的!你是对的。

    【讨论】:

      【解决方案2】:

      你可以认为一个字符数组如下:

      所以你在图片中看到一个字符数组已经是一个指针,并且每个字符都有一个地址,而指针的地址是第一个元素的地址,所以当你声明

      char str[] = "GEEKSFORGEEKS\n"; 
      

      它是在内存中分配的,如下所示:

      [G][E][E][K][S][F][O][R][G][E][E][K][S][\n][\0]
      

      程序会崩溃,因为你有一个 ch 变量的重新声明,而且没有必要初始化 char ch = 'G';,因为你在 while 循环中重写了它,它需要 str [j],所以你开始迭代 j = 0,数组 [G] 中的第一个索引,因为你正在递增循环将一直到 null字符 [\0] 并停止,因为在 NULL 之后没有迭代,在其他示例中,您可能会在循环中看到以下条件:while(str[j] != '\0') 这类似于您的条件,但更具体。

      您可以通过像下面这样迭代指针来获得更多性能:

      #include <ctype.h> 
      #include <stdio.h> 
      
      int main() 
      {
          char *str = "GEEKSFORGEEKS\n";
      
          while (*str)
              putchar(tolower(*str++));
      
          return 0; 
      }
      

      【讨论】:

        【解决方案3】:

        虽然,你得到了答案。不过,我想在这里添加更多细节或解释性答案。

        在 C 中,条件语句的值为 1 或 0。最后,它们都被评估为布尔值 truefalse 10

        首先,尝试理解或试运行 while(str[j])。猜猜当 j = 0 时 str[j] 的值是多少。它将是第一个字符 "G"。同样,在下一次迭代中,您将获得下一个字符,直到 NULL 字符或 String Termination 字符。现在,while(str[j]) 中这些括号之间的任何内容都将被视为条件语句,并且它们都被评估为 1 或 0。现在,无论如何,如果该条件语句没有被专门评估为 0,那么它'应该有 1 的值。 所以,这里str[j] when j = 0 将被评估为1,然后是下一个字符,依此类推。现在,当我们找到\0 时,它是一个escape character 等价于0。因此,\0 while 循环将终止,因为条件为假。

        你能告诉我这个程序的输出是什么吗?

        #include<stdio.h>
        
        int main()
        {
            if(printf("Hello TraineeGuy\n"))
                printf("TRUE");
            else
                printf("FALSE");
            return 0;
        }
        

        【讨论】:

        • 你为什么要在程序中两次声明ch变量?这不会引发任何错误吗? @TraineeGuy
        猜你喜欢
        • 2015-06-22
        • 1970-01-01
        • 2015-09-09
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多