C 反向函数数组字符串

C 反向函数数组字符串,c,arrays,string,C,Arrays,String,为什么我的reverse函数没有将字符串反转回Hello!当我第二次调用函数时 我可以改变什么来使用我的函数多次反转+反反转我的字符串 #include <stdio.h> #include <stdlib.h> #include <string.h> void reverse(char arr[], int numberOfChars); int main() { char myString[] = "Hello!"; int lengt

为什么我的reverse函数没有将字符串反转回Hello!当我第二次调用函数时

  • 我可以改变什么来使用我的函数多次反转+反反转我的字符串

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void reverse(char arr[], int numberOfChars);
    
    int main()
    {
        char myString[] = "Hello!";
        int length = strlen(myString);
    
        for (int i = 0; i < length; i++)
        {
            printf("%c", myString[i]);
        }
        printf("\n");
    
        reverse(myString, length);
        reverse(myString, length);
    
        getchar();
        return 0;
    }
    
    void reverse(char arr[], int numberOfChars)
    {
        for (int i = numberOfChars - 1; i >= 0; i--)
        {
            printf("%c", arr[i]);
        }
        getchar();
    }
    
    #包括
    #包括
    #包括
    无效反向(字符arr[],整数字符);
    int main()
    {
    char myString[]=“你好!”;
    int length=strlen(myString);
    for(int i=0;i=0;i--)
    {
    printf(“%c”,arr[i]);
    }
    getchar();
    }
    

  • 因为在
    reverse()
    中从不修改
    arr[]
    ,所以只需按迭代顺序打印即可

    应该是这样的:

    void reverse(char *s, size_t length)
    {
      for(size_t i = 0; i < length / 2; ++i)
      {
        const size_t tail = length - (i + 1);
        const char tmp = s[tail];
        s[tail] = s[i];
        s[i] = tmp;
      }
    }
    
    void reverse(字符*s,大小\u t长度)
    {
    对于(尺寸i=0;i

    另外,在
    reverse()
    中也没有奇怪的
    getchar()
    调用,这毫无意义。

    您第二次也在使用相同的字符串。你的函数是空的,实际上你对字符串本身什么都不做,只是按相反的顺序打印字母。为了满足您的需要,您应该将正在执行的操作保存在一个变量中,然后返回它,或者使用一个函数单独打印。

    当您从主函数调用时,反向函数的参数(myString)在两次内是相同的。您只是以反向格式打印字符,而不是在子模块中反向打印。

    如果您想反向打印单词“Hello!”,则更方便的方法是将其定义为字符串,然后使用
    reverse(myString.begin(),myString.end())
    反向(&myString[0],myString.length())

    功能的参数
    reverse(p1,p2)
    应该是
    reverse(第一个位置,最后一个位置)

    此外,如果您真的想将字符串定义为char,您应该将它们放在迭代中,然后像@unwind所说的那样逐个反转它们


    有关
    reverse
    功能的更多详细信息,请访问

    您不是在反转字符串,而是在按相反顺序打印