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

时间:2014-06-12 10:11:38

标签: c function

这是代码的一部分,它描述了一个反转字符串字符的功能 (基于C中Brian W. Kernighnan编程的练习1-19)...
(我用Google搜索了各种文本反转功能,但所有这些都是指针或使用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 ;
    }
}

但是我认为覆盖数组很糟糕,整个功能似乎都很糟糕。

PS:如果你在这里检查并帮助我完成整个代码会很棒,因为如果我在这里发布它会是offtopic,代码的主要返回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;
    }
}

完整代码在这里:

Code

代码工作在这里:

enter image description here


更新:

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

#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);   

}

2 个答案:

答案 0 :(得分:4)

我不知道你在哪里得到这段代码,但它确实很破碎:

  1. n永远不会被初始化。这是未定义的行为。

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

  3. while循环无法做任何明智的事情,因为它的身体无法改变循环条件。

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

答案 1 :(得分:3)

循环

while(s[i] != EOF)
{
    ++n;
}

似乎错了。

  1. 通过0检查字符串结尾,而不是通过EOF
  2. 您永远不会更改i,因此您始终选中s[0]