一个简单的C程序,有些地方看不懂,请朋友们帮我解释一下

来源:百度知道 编辑:UC知道 时间:2024/05/14 01:21:19
写一个函数,将一个字符串按反序存放起来,在主函数中输入和输出字符串
main()
{
char str[100];
void inverse(char str[]);
printf("inputer string:");
scanf("%s",str);
inverse(str);
printf("inverse string:%s\n",str);
}
void inverse(char str[])
{
char t;
int i;
for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)
{
t=str[i];
str[i]=str[j-1];
str[j-1]=t;
}
}
这是这个问题的答案,其中for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)这句看不懂,请大家解释解释
for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)中的strlen(str)是什么意思呢?

for (part a;part b;part c)
{
part d;
}

的执行顺序是这样的
part a;

while (part b)
{
part d;
part c;
}

注意 for ()里面的 分割符是;如果有,也只是一个part的一部分
所以那句相当于

i=0;
j=strlen(str);

while (i<(strlen(str)/2))
{
t=str[i];
str[i]=str[j-1];
str[j-1]=t;

i++;j--;
}

for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)
{
t=str[i];
str[i]=str[j-1];
str[j-1]=t;
}

相当于:
const int LEN = strlen(str);
for(i = 0;i < LEN/2;i++)
{
t = str[i];
str[i] = str[LEN-i-1];
str[LEN-i-1] = t;
//头尾对应单元对调
}
假设数组下标是: 0,1,2,3,4,5
那么上面循环的功能是 0和5交换,1和4交换,2和3交换
一次类推所以
i < LEN/2
str[i] 与 str[LEN-i-1]交换

strlen(str)
这个是求字符传的长度