一道迷糊的C语言题

来源:百度知道 编辑:UC知道 时间:2024/06/01 04:36:11
#include<stdio.h>
#include<string.h>
void main()
{
void str(char []);
char a[80];
printf("gets number: ");
scanf("%s",a);
str(a);
}
void str(char a[])
{
int i;
for(i=strlen(a);i>0;i--)
{a[2*i]=a[i];
a[i*2-1]=' ';
}
printf("%s",a);
}
在a[2*i]=a[i];我很不理解。感觉可有可无,可是去除后调试有错的。谁给点点短小的分析。。。先谢谢了。
需要的是分析为什么,不是调试结果,浑水摸鱼的走开

str函数里之所以这样处理
for(i=strlen(a);i>0;i--)
{a[2*i]=a[i];
a[i*2-1]=' ';
}
是把原本的字符串前加一个空格,形成新的字符串。
比如输入
abcdef
012345(这表示a数组下标)
那么经过这个函数首先f赋值到了a[10],又把空格' '赋值给a[9],以此类推直到a[0],a[0]并不做变化,因此结果就输出了
a b c d e f
012345678910(还是代表下标)

……这个显示有问题,你明白意思就好~~

12345
1 2 3 4 5

程序接收你输入的字符串,赋给a[].
再对原来字符串进行copy,并在中间插入一个空格.如1楼所说的,你输入12345,开始a[i]=’5’,赋给a[2*i],并把a[2*i-1]置为’’,依次类推输出结果为
1 2 3 4 5