反转字符串 - 循环不执行

时间:2015-07-04 06:02:17

标签: c for-loop reverse

我编写了一个程序来反转句子中的字符(不使用strrev之类的字符串函数等)。这是一个应该做什么的例子

输入 - hi john
输出 - ih nhoj

程序:

#include <stdio.h>
main()
{
int i,j,k=0,count=0;
char a[100],temp;
printf("enter name\n");
gets(a);
while(a[k]!=0)
{
    count++;
    k++;
}
printf("%d\n",count);
for(i=0,j=count;i<j;i++,j--)
{
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
}
printf("%s\n",a);
}

问题是fo r循环没有执行,只执行while循环。

请帮忙。

3 个答案:

答案 0 :(得分:3)

j的起始值应为count-1,而不是countcount位置的元素是零终结符,不想交换!

for(i=0,j=count-1;i<j;i++,j--)
               ^^

请勿使用gets(),因为它无法防止缓冲区溢出并使用fgets()。已从C11(最新的C标准)中删除gets()。使用fgets()时需要注意的一件事是,如果缓冲区中有足够的空间需要删除,它还​​会读取换行符。

答案 1 :(得分:2)

您应该意识到在while循环结束时count存储了输入的字符串的长度。例如,如果您输入hello count保留5。但是字符串的最后一个元素将位于count-1索引而不是count索引,因为索引从0开始。

所以你应该将j设置为count-1。主要回复int也是一种很好的做法。

答案 2 :(得分:-1)

  

替换

for(i=0,j=count;i<j;i++,j--)
  

for(i=0,j=count-1;i<j;i++,j--)