2 qq 38918440 qq_38918440 于 2017.06.15 16:56 提问

c程序,很简单,需要大神解答。。。。。。

#include
#include
void mystrcat(char a[],char b[]){//把a和b拼接起来?
int i=0,j=0;
//while(a[i++]!='\0');_
i--;//求解释啊!!!!!!!!!!
while(b[j]!='\0'){
a[i++]=b[j++];
}
a[i]='\0';
}
int main()
{
char a[100],b[100];
gets(a);
gets(b);
mystrcat(a,b);
puts(a);
return 0;
system("pause");
}

5个回答

fight_in_dl
fight_in_dl   Ds   Rxr 2017.06.15 19:03

理解这个题目的关键是: 字符数组隐含有一个元素 '\0' 用来标志字符串的结束。

假设a数组里保存的字符串是"john",b数组里保存的字符串是"tom",则:

a[0] = 'j', a[1] = 'o', a[2] = 'h', a[3] = 'n', a[4] = '\0'
b[0] = 't', b[1] = 'o', b[2] = 'm', b[3]  = '\0'

然后看看函数是怎么执行的:

void mystrcat(char a[], char b[]) {

    int i = 0, j = 0;
    while (a[i++] != '\0') ; //循环a数组,当 i=4, 即a[4]='\0'时,判断为假,退出循环,注意因为有自增,所以此时i=5
    i--;                              // i=5-1=4
    while (b[j] != '\0') {   //循环b数组,当 j=3, 即b[3]='\0'时,判断为假,退出循环。
        a[i++] = b[j++];     //循环结果是这样的:
                                      //a[4] = b[0] = 't',a[5] = b[1] = 'o',a[6] = b[2] = 'm',
    }
    a[i] = '\0';                //退出循环后i = 7,这句相当于 a[7] = '\0'
}

综上,a[0] = 'j', a[1] = 'o', a[2] = 'h', a[3] = 'n', a[4] = 't', a[5] = 'o', a[6] = 'm',a[7] = '\0'
这样,就得到"johntom",实现拼接。

用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!

qq_38918440
qq_38918440 其实就想问第一个while及i--那块,谢谢哈
9 天之前 回复
qq_30348181
qq_30348181   2017.06.15 17:03

先把i移动到a数组的末尾然后再将b数组里面的元素挨个挨个的加到a数组里面去,最后赋上结束符 ,

qian337816953
qian337816953   2017.06.15 18:12

但是这个搞法容易越界。可以用指针

shaolaime
shaolaime   2017.06.17 18:53

i--的意思就是 当while执行完了以后i对应的下标是'\0'的后一个。但是程序要正确i就要对应'\0',覆盖\0往后写字符。

saintfox001
saintfox001   2017.06.19 15:49

这写法,越界咋整??

Csdn user default icon
上传中...
上传图片
插入图片