C语言中的反向字符串函数写得不好吗?/如何使这段代码更好?

C语言中的反向字符串函数写得不好吗?/如何使这段代码更好?,c,function,C,Function,下面是代码的一部分,它描述了一个反转字符串字符的函数 (基于Brian W.Kernighnan C语言编程练习1-19)… (我在谷歌上搜索了各种文本反转函数,但都是指针或使用strrev(),但我不知道指针是什么……也不想使用strrev(),因此我按照作者的要求制作了一个反转字符串函数……。) 职能: void reverse(char s[]) { int i , n ; char j ; i = 0 ; while(s[i] != '0') //And

下面是代码的一部分,它描述了一个反转字符串字符的函数 (基于Brian W.Kernighnan C语言编程练习1-19)…
(我在谷歌上搜索了各种文本反转函数,但都是指针或使用strrev(),但我不知道指针是什么……也不想使用strrev(),因此我按照作者的要求制作了一个反转字符串函数……。) 职能:

void reverse(char s[])
{
    int i , n ;
    char j ;
    i = 0 ;
    while(s[i] != '0') //And not EOF
    {
        ++n;
    }
    for(i = 0; i < n; ++i)
    {
        j = s[i] ;
        s[i] = s[n - 1] ;
        s[n - 1] = j ;
    }
}
void reverse(字符s[])
{
inti,n;
查尔j;
i=0;
而(s[i]!='0')//而不是EOF
{
++n;
}
对于(i=0;i
但是,我认为覆盖数组是不好的,而且整个函数似乎有问题。

附言:如果你在这里检查并帮助我处理整个代码,那就太好了,因为如果我在这里发布,代码的主返回值为0,这将是离题的;但是它仍然不起作用。。。。

[编辑] 好的,我真的很抱歉给你的打字错误带来麻烦。。。我不能删除这个问题,因为它的答案是向上投票,但是我很抱歉

正确的功能是:

void reverse(char s[])
{
    int i, l;
    char temp;
    for (l = 0; s[l] != '\0'; ++l);
    l--;
    for (i = 0; i < l; ++i) {
        temp = s[i];
        s[i] = s[l-1];
        s[l-1] = temp;
        --l;
    }
}
void reverse(字符s[])
{
int i,l;
焦炭温度;
对于(l=0;s[l]!='\0';++l);
l--;
对于(i=0;i
完整代码如下:

代码工作在这里:


更新:

我为“hello”一词创建了一个正确且有效的解决方案:

#include <stdio.h>

int main(void)
{
    char s[] = "hello";
    char temp;



    // do the swapping here..

    temp = s[0];
    s[0] = s[4] ;
    s[4] = temp ;

    temp = s[1] ;
    s[1] = s[3] ;
    s[3] = temp ; 

   temp = s[2] ;
   s[2] = s[2] ;
   s[2] = temp ;
   printf("%c, %s ", temp, s);   

}
#包括
内部主(空)
{
char s[]=“你好”;
焦炭温度;
//在这里交换。。
温度=s[0];
s[0]=s[4];
s[4]=温度;
温度=s[1];
s[1]=s[3];
s[3]=温度;
温度=s[2];
s[2]=s[2];
s[2]=温度;
printf(“%c,%s”,温度,s);
}
循环

while(s[i] != EOF)
{
    ++n;
}
这似乎是错误的

  • 通过
    0
    检查字符串结束,而不是通过
    EOF
    检查
  • 您从不更改
    i
    ,因此始终选中
    s[0]

  • 我不知道你是从哪里得到这段代码的,但实际上它已经完全崩溃了:

  • n
    从未初始化。这是未定义的行为

  • while循环根本不会终止,因为它将
    char
    与不在
    char
    范围内的值进行比较

  • while循环不能做任何有意义的事情,因为它的主体不能更改循环条件

  • for循环使用一个数组元素交换所有字符,从而有效地将字符串向右旋转一个字符。但无论如何,该计划永远不会达到这一点


  • 要求改进和批评功能代码的问题更适合于。C中的字符串通常以nul结尾(
    0
    '\0'
    ),不是
    EOF
    ,它是一个负整数。@Juhana但是既然我有一个仅为47@Juhana这段代码根本不起作用。你的while是一个无止境的循环,你对n所做的是未定义的行为,那么我应该把它设为s[I]=“0”@ArchKudo不,你应该做
    s[i]!=0
    @ArchKudo,如前所述,另外do
    n=0并使用
    s[n]!=0
    @ArchKudo您离我们越来越近了。它仍然存在一个问题,但是为什么不试着编译代码,看看它是否符合您的要求呢?通过这种方式,您可以学会自己调试代码,这对于学习编程至关重要。@glglglgl实际上,循环
    for(n=0;s[n]!='\0';++n)
    正常,它正确地递增
    n
    ,直到它指向终止的空字节。然而,下面的陈述并非如此。