当前位置: 代码迷 >> C语言 >> [求助]睇吾明最后这个while的语句是什么意思?
  详细解决方案

[求助]睇吾明最后这个while的语句是什么意思?

热度:179   发布时间:2006-11-17 17:18:23.0
[求助]睇吾明最后这个while的语句是什么意思?
下面这段是要把字符数组STR2放到字符数组STR1的后面,但是最后的while((str1[i++]=str2[j++])!='\0');是什么意思呢?
I#include "stdio.h"
main()
{
char str1[80],str2[80];
int i=0,j=0;
gets(str1);
gets(str2);
while(str1[i]!='\0')i++;
while((str1[i++]=str2[j++])!='\0'); /*这段要怎么理解?这是只有表达式没有语句吗?但括号里面的应该不是表达式吧?*/
printf("结果为:%s\n",str1);
}

以下是引用刀仔在2006-11-20 10:53:42的发言:

如果我在STR1这数组输入this is,str2数组里填入PAN,那
str1[0]='t'
str1[1]='h'
str1[2]='i'
str1[3]='s'
str1[4]=' '
str1[5]='i'
str1[6]='s'
str1[7]='\0'
那while(str1[i]!='\0')i++;这条语句循环结束后i应该是等于7了。
而while((str1[i++]=str2[j++])!='\0');里面的str1[i++]不是变成了str1[8]了吗?那str2数组第一个字符P不就去到str1[8]里面去了吗?那到结束时中间不就有一个结束符吗?这主要是这里不太明白。
可能我才是刚刚开始自学,所以很多地方都不太明白。

能解答一下这个吗??

[此贴子已经被作者于2006-11-21 8:14:05编辑过]

搜索更多相关的解决方案: 语句  

----------------解决方案--------------------------------------------------------
((str1[i++]=str2[j++])!='\0')
把str2 copy 到str1,
gets读入字符串时自动在末尾加上'\0'
----------------解决方案--------------------------------------------------------
第一个while是求得str1的长度,第二个while是把str2的内容复制到str1后面。
(str1[i++]=str2[j++])是将str2的内容复制到str1的尾部,当到了str2的尾部时,表达式(str1[i++]=str2[j++])的值为'\0',结束循环。
要注意,每一个表达式都有值。

[此贴子已经被作者于2006-11-17 18:37:55编辑过]


----------------解决方案--------------------------------------------------------
意思同楼上差不多。
#include "stdio.h"
main()
{
char str1[80],str2[80];
int i=0,j=0;
gets(str1);
gets(str2);
while(str1[i]!='\0')i++;
while((str1[i++]=str2[j++])!='\0'); /*注意while((str1[i++]=str2[j++])!='\0'); 是一条语句,括号里是表达式*/
printf("结果为:%s\n",str1);
}

----------------解决方案--------------------------------------------------------

如果我在STR1这数组输入this is,str2数组里填入PAN,那
str1[0]='t'
str1[1]='h'
str1[2]='i'
str1[3]='s'
str1[4]=' '
str1[5]='i'
str1[6]='s'
str1[7]='\0'
那while(str1[i]!='\0')i++;这条语句循环结束后i应该是等于7了。
而while((str1[i++]=str2[j++])!='\0');里面的str1[i++]不是变成了str1[8]了吗?那str2数组第一个字符P不就去到str1[8]里面去了吗?那到结束时中间不就有一个结束符吗?这主要是这里不太明白。
可能我才是刚刚开始自学,所以很多地方都不太明白。


----------------解决方案--------------------------------------------------------
顶上去先。。
----------------解决方案--------------------------------------------------------
以下是引用刀仔在2006-11-20 10:53:42的发言:

如果我在STR1这数组输入this is,str2数组里填入PAN,那
str1[0]='t'
str1[1]='h'
str1[2]='i'
str1[3]='s'
str1[4]=' '
str1[5]='i'
str1[6]='s'
str1[7]='\0'
那while(str1[i]!='\0')i++;这条语句循环结束后i应该是等于7了。
而while((str1[i++]=str2[j++])!='\0');里面的str1[i++]不是变成了str1[8]了吗?那str2数组第一个字符P不就去到str1[8]里面去了吗?那到结束时中间不就有一个结束符吗?这主要是这里不太明白。
可能我才是刚刚开始自学,所以很多地方都不太明白。

i++是先执行语句,再让i自增1,所以str2的第一个字符是附给str1[7].
----------------解决方案--------------------------------------------------------

我靠!!!!!!!!!!你几年C龄了!!!!这就看不懂!!!!!!!!!!!!11
while((str1[i++]=str2[j++])!='\0');这句就是把STR2[J++]值传替给STR2[I++],后面的那个不等于就是里面的条件了!!!!!!!!
如果/0的循环就结束!!!!!!!!!!!!!1
因为字符串是以/0结束的!!!!!!!!!!
它不算在字符串的长度里面!!!!!!!!!!!!!!!!

不瞒你是说!!!!!!!!!!
我才学两周!!!!!!!!!!!


----------------解决方案--------------------------------------------------------
前++和后++不会吧!自己好好查阅一下资料吧!
----------------解决方案--------------------------------------------------------
  相关解决方案