反转字符串 - 循环不执行
Reversing a string - Loop doesn't execute
我编写了一个程序来反转句子中的字符(不使用 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
循环执行。
请帮忙。
j
的起始值应该是count-1
,而不是count
。第 count
位置的元素是不想交换的零终止符!
for(i=0,j=count-1;i<j;i++,j--)
^^
不要使用gets()
,因为它不能防止缓冲区溢出并使用fgets()
。 gets()
已从 C11(最新的 C 标准)中删除。使用 fgets()
时需要注意的一件事是,如果缓冲区中有足够的 space 需要删除,它也会读取换行符。
你应该意识到在 while 循环结束时 count
存储字符串的长度 entered.For 例如如果你输入 hello
count
保存 5
.但字符串的最后一个元素将位于 count-1
索引处而不是 count
索引处,因为索引从 0
.
开始
因此您应该将 j
设置为 count-1
。此外,将 main return int
设置为一个很好的做法。
replace
for(i=0,j=count;i<j;i++,j--)
with
for(i=0,j=count-1;i<j;i++,j--)
我编写了一个程序来反转句子中的字符(不使用 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
循环执行。
请帮忙。
j
的起始值应该是count-1
,而不是count
。第 count
位置的元素是不想交换的零终止符!
for(i=0,j=count-1;i<j;i++,j--)
^^
不要使用gets()
,因为它不能防止缓冲区溢出并使用fgets()
。 gets()
已从 C11(最新的 C 标准)中删除。使用 fgets()
时需要注意的一件事是,如果缓冲区中有足够的 space 需要删除,它也会读取换行符。
你应该意识到在 while 循环结束时 count
存储字符串的长度 entered.For 例如如果你输入 hello
count
保存 5
.但字符串的最后一个元素将位于 count-1
索引处而不是 count
索引处,因为索引从 0
.
因此您应该将 j
设置为 count-1
。此外,将 main return int
设置为一个很好的做法。
replace
for(i=0,j=count;i<j;i++,j--)
with
for(i=0,j=count-1;i<j;i++,j--)