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);
}
如果我在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]里面去了吗?那到结束时中间不就有一个结束符吗?这主要是这里不太明白。
可能我才是刚刚开始自学,所以很多地方都不太明白。
----------------解决方案--------------------------------------------------------
顶上去先。。
----------------解决方案--------------------------------------------------------
如果我在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结束的!!!!!!!!!!
它不算在字符串的长度里面!!!!!!!!!!!!!!!!
不瞒你是说!!!!!!!!!!
我才学两周!!!!!!!!!!!
----------------解决方案--------------------------------------------------------
前++和后++不会吧!自己好好查阅一下资料吧!
----------------解决方案--------------------------------------------------------