遍历 C 中的字符数组
Iterate through an array of characters in C
最近我在下面的示例中看到了 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;
}
while 循环可以理解为 "while this string has characters" 并且在 C 字符串或字符数组中包含一个 '\0' => Null 字符,最后,一旦 while 循环实现它,它将停止迭代。
是的!你是对的。
你可以把一个字符数组想象成下面这样:
所以你在图片中看到一个字符数组已经是一个指针,每个字符都有一个地址,指针的地址就是第一个元素的地址,所以当你声明
char str[] = "GEEKSFORGEEKS\n";
它被分配在如下内存中:
[G][E][E][K][S][F][O][R][G][E][E][K][S][\n][[=11=]]
程序将崩溃,因为您重新声明了 ch 变量,而且不需要初始化 char ch = 'G';
,因为您在while 循环,它需要 str[j],所以你开始在 j = 0 迭代,这是数组中的第一个索引 [G] ,随着你递增,循环将一直进行到空字符 [\0] 并停止,因为在 NULL 之后没有迭代,在其他情况下例如,您可能会在循环中看到以下条件:while(str[j] != '[=14=]')
这与您的条件相似,但更具体。
您可以通过像下面这样遍历指针来获得更高的性能:
#include <ctype.h>
#include <stdio.h>
int main()
{
char *str = "GEEKSFORGEEKS\n";
while (*str)
putchar(tolower(*str++));
return 0;
}
虽然,你得到了答案。不过,我想在这里添加更多细节或解释性答案。
In C, a conditional statement will have either the value 1 or 0. In the end, they all are evaluated to Boolean values true or false or 1 or 0.
所以首先,尝试理解或干燥 运行 那个 while(str[j])
。猜猜当 j = 0 时 str[j]
的值是多少。它将是第一个字符 "G"。同样,在下一次迭代中,您将获得下一个字符,直到 NULL 字符或 String Termination 字符。现在,while(str[j])
中那些括号之间的任何内容都将被视为条件语句,并且它们都被评估为 1 或 0。现在无论如何,如果该条件语句未被专门评估为 0,那么它应该具有 1 的值。
因此,此处 str[j] when j = 0
将被评估为 1
,然后是下一个字符,依此类推。现在,当我们找到 [=16=]
时,它是 escape character
等同于 0
。因此,在 [=16=]
while 循环将终止,因为条件将为假。
Can, you tell me what will be the output of this program?
#include<stdio.h>
int main()
{
if(printf("Hello TraineeGuy\n"))
printf("TRUE");
else
printf("FALSE");
return 0;
}
最近我在下面的示例中看到了 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;
}
while 循环可以理解为 "while this string has characters" 并且在 C 字符串或字符数组中包含一个 '\0' => Null 字符,最后,一旦 while 循环实现它,它将停止迭代。
是的!你是对的。
你可以把一个字符数组想象成下面这样:
所以你在图片中看到一个字符数组已经是一个指针,每个字符都有一个地址,指针的地址就是第一个元素的地址,所以当你声明
char str[] = "GEEKSFORGEEKS\n";
它被分配在如下内存中:
[G][E][E][K][S][F][O][R][G][E][E][K][S][\n][[=11=]]
程序将崩溃,因为您重新声明了 ch 变量,而且不需要初始化 char ch = 'G';
,因为您在while 循环,它需要 str[j],所以你开始在 j = 0 迭代,这是数组中的第一个索引 [G] ,随着你递增,循环将一直进行到空字符 [\0] 并停止,因为在 NULL 之后没有迭代,在其他情况下例如,您可能会在循环中看到以下条件:while(str[j] != '[=14=]')
这与您的条件相似,但更具体。
您可以通过像下面这样遍历指针来获得更高的性能:
#include <ctype.h>
#include <stdio.h>
int main()
{
char *str = "GEEKSFORGEEKS\n";
while (*str)
putchar(tolower(*str++));
return 0;
}
虽然,你得到了答案。不过,我想在这里添加更多细节或解释性答案。
In C, a conditional statement will have either the value 1 or 0. In the end, they all are evaluated to Boolean values true or false or 1 or 0.
所以首先,尝试理解或干燥 运行 那个 while(str[j])
。猜猜当 j = 0 时 str[j]
的值是多少。它将是第一个字符 "G"。同样,在下一次迭代中,您将获得下一个字符,直到 NULL 字符或 String Termination 字符。现在,while(str[j])
中那些括号之间的任何内容都将被视为条件语句,并且它们都被评估为 1 或 0。现在无论如何,如果该条件语句未被专门评估为 0,那么它应该具有 1 的值。
因此,此处 str[j] when j = 0
将被评估为 1
,然后是下一个字符,依此类推。现在,当我们找到 [=16=]
时,它是 escape character
等同于 0
。因此,在 [=16=]
while 循环将终止,因为条件将为假。
Can, you tell me what will be the output of this program?
#include<stdio.h>
int main()
{
if(printf("Hello TraineeGuy\n"))
printf("TRUE");
else
printf("FALSE");
return 0;
}