C 程序 使用递归来反转字符串

  • Post category:C

使用递归反转字符串的C程序示例如下:

#include <stdio.h>
#include <string.h>

void reverse(char* str);

int main()
{
    char str[100];
    printf("Enter a string: ");
    gets(str);
    reverse(str);
    printf("Reversed string: %s\n", str);
    return 0;
}

void reverse(char* str)
{
    if(*str == '\0') // base case (when only the null character is left)
    {
        return;
    }
    else
    {
        reverse(str+1); // recurse on the rest of the string
        char temp = *str;
        int len = strlen(str);
        for(int i=1; i<len; i++)
        {
            *(str+i-1) = *(str+i); // shift all characters one position to the right
        }
        *(str+len-1) = temp; // place the first character at the end
    }
}

此程序使用递归来反转字符串。

1. 程序输入字符串并输出其反转后的结果

程序从用户输入读取一个字符串(使用内置函数 gets()),然后调用 reverse() 函数,将该字符串整体传入 reverse() 函数,最后输出反转后的结果。

代码示例:

Enter a string: Hello, world!
Reversed string: !dlrow ,olleH

2. 程序输出多个字符串的反转结果

可以通过在 main() 函数中循环输入多个字符串,并且多次调用 reverse() 函数来反转这些字符串,最后一次输出反转后的结果。

代码示例:

int main()
{
    char str[100];
    int count;
    printf("Enter the number of strings to reverse: ");
    scanf("%d", &count);
    getchar(); // to flush the newline character from the input buffer

    for(int i=0; i<count; i++)
    {
        printf("Enter string #%d: ", i+1);
        gets(str);
        reverse(str);
        printf("Reversed string #%d: %s\n", i+1, str);
    }

    return 0;
}

程序中,先从用户输入读取字符串数量 count。然后,使用 for 循环读取 count 个字符串,对每个字符串调用 reverse() 函数,输出其反转结果。

代码运行示例:

Enter the number of strings to reverse: 3
Enter string #1: Hello, world!
Reversed string #1: !dlrow ,olleH
Enter string #2: Programming in C is fun!
Reversed string #2: !nuf si C ni gnimmargorP
Enter string #3: This is an example
Reversed string #3: elpmaxe na si sihT