我发现这个程序可以在线反转这个程序。
我刚刚开始学习C。
我无法理解这里的一些事情。
while(str[++i]!='\0');
是什么意思?这是该计划:
rev[j++] = str[--i];
答案 0 :(得分:3)
while(str[++i]!='\0');
相当于
while(str[++i]!='\0')
/*do nothing*/;
相当于
++i;
while (str[i]!='\0') {
++i;
}
和
while(i>=0)
rev[j++] = str[--i];
相当于
while (i>=0) {
--i;
rev[j] = str[i];
++j;
}
请注意,i
在语句之前递减,因为--i
是预递减,而j
在语句之后递增,因为j++
是后递增。
答案 1 :(得分:1)
process_id
可以关闭循环;
表示"转到str的每个字符,直到到达while(str[++i]!='\0');
字符"。\0
是字符串的结束字符答案 2 :(得分:1)
我会尽力回答......
- 为什么while结束;
醇>
这是有效的语法,它通常用于使程序在该行等待,直到在嵌入式方案中设置某个标志。在这种情况下,它用于查找字符串的长度。 所有字符串都以空字符结尾,即'\ 0',而i上的preincrement意味着在该行之后,我将保存字符串长度的值。 实际上它等同于:
/* If the ith position of the string is not the end */
while (str[i] != '\0') {
/* Increment i and repeat */
i = i + 1;
}
这里的主要概念是后增量和前增量算子之间的区别 - 可能值得一读。
- while(str [++ i]!='\ 0');意思?
醇>
见上文。
3.是rev [j ++] = str [ - i];和写j ++一样;和我 - ;在while循环中?
如果你问的是它是否在while循环中,它完全等同于:
while(i>=0) {
rev[j++] = str[i--];
}
由于while循环中只有一个操作,因此不需要括号。 只是一个注释,这是完全主观的,但即使在这种情况下,我也会使用大多数编码标准。
您的问题似乎主要与C的语法有关 - 可能值得一本书出来或看一些教程来熟悉它。
答案 3 :(得分:0)
首先,while(str[++i]!='\0');
递增i直到找到最后一个字符。在C中,所有字符串以\ 0或NULL结尾(两者都相同)。
第二个,没有。它与--i
不同{。{1}}。
检查以下代码snipet:
i++
在执行结束时,a = 10但b = 9.这是因为--y是预减量。它首先递减值,然后将其值赋给b。
答案 4 :(得分:0)
这是该程序的注释版本:
// Include standard input output functions
#include<stdio.h>
// declares the main function. It accept an undefined number
// of parameters but it does not handles them, and returns an integer
int main(){
// declares tho arrays of 50 characters initialized with random values
char str[50];
char rev[50];
// declare and initialize two integer variables
int i=-1,j=0;
printf("Enter any string : ");
scanf("%s",str);
// executes the ';' instruction while the condition is satisfied.
// ';' is an empty statement. Thus do nothing.
// The only action executes here, is the increment of the i variable with
// a preincrement. Because the i variable was initialized with
// -1, the first control start checking if str[0] != '\0'
// If the post increment operator was used, the variable must
// have been initialized with 0 to have the same behaviour.
while(str[++i]!='\0');
// at the end of the previous while, the i variable holds the
// str lenght + 1 (including the '\0')
// starting from the end (excluding the '\0', using the pre-decrement on the i variable)
// assign to rev[j] the variable of str[i], then (post increment)
// increment the j variable
while(i>=0)
rev[j++] = str[--i];
// now j is equals to str lenth +1
// therefore in this position add the null byte
rev[j]='\0';
// print result
printf("Reverse of string is : %s",rev);
// return 0 to the OS
return 0;
}
答案 5 :(得分:0)
;
表示 c中语句的结尾。
while(condition)
{
//do something
}
做某事意味着至少应该执行一条陈述。为此,此处使用;
。
while(str[++i]!='\0');
'\0'
表示字符串的结尾。这里循环终止于字符串的末尾,++i
增加i
。
是rev [j ++] = str [ - i];和写j ++一样;和我 - ;在while循环中?
是。但是,--i
在执行i
之前rev[j++] = str[--i]
增加i--
,因此rev[j] = str[i]
应该在j++
之前增加j
rev[j++] = str[--i]
在执行j++
之后增加rev[j] = str[i]
1}}所以label:before
应该在label:after
答案 6 :(得分:0)
这里的关键是理解前缀(++i
)和后缀(i--
)运算符之间的行为差异。
前缀运算符将递增其操作数(i
),然后计算为新值。
后缀运算符将计算其操作数当前值,然后递增操作数。
至于:
int i = -1;
while (str[++i] != '\0');
这是一个没有块的循环,因为所有语句都可以用条件表示。在每次迭代中:
i
增加一个。char
的{{1}}评估为。i
如果不是NUL角色。当写成:
时,可能会更好地理解这一点continue
此操作的结果是int i = -1;
do {
i++;
} while (str[i] != '\0');
现在保持字符串中NUL字符的位置,因为所有有效字符串必须以NUL字符结尾。
在程序的下一部分中,再次使用前缀运算符立即将字符在 NUL字符前一个位置,然后在此之前的一个位置,依此类推,直到我们得到字符串的第一个字符,然后我们就完成了。
i
答案 7 :(得分:0)
为何结束:
而(STR [++ I]!= '\ 0')
一旦str是一个asciiz字符串,它就会以'\ 0'字符结尾。因此,只要while到达字符串的末尾,它就会结束。
=&GT; ++ i:在获取相应的字符之前递增字符串索引。
=&GT;检查str [index]!='\ 0'//到达字符串的结尾
在i结束时,i变量将包含字符串长度(不包括'\ 0'字符)。
使用它会更容易:
i = strlen(str);
没有
这一行与:
相同while(i>=0)
{
i = i - 1;
rev[j] = str[i];
j = j + 1;
}
- i:递减i后获取字符串字符。 如果你改为i--代码在递减i之前会得到str [i],但这不是你想要的。