How do you reverse a string in place in C or C++?

前端 未结 30 2278
长发绾君心
长发绾君心 2020-11-22 00:37

How do you reverse a string in C or C++ without requiring a separate buffer to hold the reversed string?

30条回答
  •  南方客
    南方客 (楼主)
    2020-11-22 01:31

    Recursive function to reverse a string in place (no extra buffer, malloc).

    Short, sexy code. Bad, bad stack usage.

    #include 
    
    /* Store the each value and move to next char going down
     * the stack. Assign value to start ptr and increment 
     * when coming back up the stack (return).
     * Neat code, horrible stack usage.
     *
     * val - value of current pointer.
     * s - start pointer
     * n - next char pointer in string.
     */
    char *reverse_r(char val, char *s, char *n)
    {
        if (*n)
            s = reverse_r(*n, s, n+1);
       *s = val;
       return s+1;
    }
    
    /*
     * expect the string to be passed as argv[1]
     */
    int main(int argc, char *argv[])
    {
        char *aString;
    
        if (argc < 2)
        {
            printf("Usage: RSIP \n");
            return 0;
        }
    
        aString = argv[1];
        printf("String to reverse: %s\n", aString );
    
        reverse_r(*aString, aString, aString+1); 
        printf("Reversed String:   %s\n", aString );
    
        return 0;
    }
    

提交回复
热议问题