我编写了一个程序来反转句子中的字符(不使用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
循环。
请帮忙。
答案 0 :(得分:3)
j
的起始值应为count-1
,而不是count
。 count
位置的元素是零终结符,不想交换!
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--)