C语言编程题字符串反转5种方法

C语言中,反转字符串是一种常见的编程练习。可以使用临时变量、递归、指针等五种方法实现。每种方法都有其独特的实现思路和用途,可以根据具体情况选择合适的方法。

1、使用临时变量

使用双指针和临时变量来交换字符串首尾字符,从而达到反转字符串的目的。

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

void reverseString(char str[]) {
    int n = strlen(str);
    int i;
    char temp;

    for (i = 0; i < n / 2; i++) {
        temp = str[i];
        str[i] = str[n - i - 1];
        str[n - i - 1] = temp;
    }
}

int main() {
    char str[] = "Hello, World!";
    printf("Original String: %s\n", str);
    
    reverseString(str);
    printf("Reversed String: %s\n", str);
    
    return 0;
}

2、使用递归

递归方法通过不断地交换首尾字符并递归调用自身来实现字符串的反转。

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

void reverseStringRecursive(char str[], int start, int end) {
    if (start >= end)
        return;

    // Swap characters
    char temp = str[start];
    str[start] = str[end];
    str[end] = temp;

    // Recursive call
    reverseStringRecursive(str, start + 1, end - 1);
}

int main() {
    char str[] = "Hello, World!";
    printf("Original String: %s\n", str);

    reverseStringRecursive(str, 0, strlen(str) - 1);
    printf("Reversed String: %s\n", str);

    return 0;
}

3、使用指针

使用指针来遍历字符串并交换字符,从而实现反转。

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

void reverseStringPointer(char *str) {
    char *start = str;
    char *end = str + strlen(str) - 1;
    char temp;

    while (start < end) {
        temp = *start;
        *start = *end;
        *end = temp;

        start++;
        end--;
    }
}

int main() {
    char str[] = "Hello, World!";
    printf("Original String: %s\n", str);

    reverseStringPointer(str);
    printf("Reversed String: %s\n", str);

    return 0;
}

4、使用栈

使用栈的后进先出(LIFO)特性来反转字符串。

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

#define MAX 1000

struct Stack {
    int top;
    char items[MAX];
};

void push(struct Stack* stack, char item) {
    if (stack->top == MAX - 1) {
        printf("Stack overflow\n");
        return;
    }
    stack->items[++stack->top] = item;
}

char pop(struct Stack* stack) {
    if (stack->top == -1) {
        printf("Stack underflow\n");
        return '\0';
    }
    return stack->items[stack->top--];
}

void reverseStringUsingStack(char str[]) {
    int n = strlen(str);
    struct Stack stack;
    stack.top = -1;

    // Push all characters of string to stack
    for (int i = 0; i < n; i++) {
        push(&stack, str[i]);
    }

    // Pop all characters from stack and put them back to string
    for (int i = 0; i < n; i++) {
        str[i] = pop(&stack);
    }
}

int main() {
    char str[] = "Hello, World!";
    printf("Original String: %s\n", str);

    reverseStringUsingStack(str);
    printf("Reversed String: %s\n", str);

    return 0;
}

5、使用库函数

利用 C 标准库中的 strrev 函数(在一些编译器中支持)来反转字符串。如果 strrev 不可用,我们可以自己实现一个类似的函数。

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

// 自定义 strrev 函数
char* myStrrev(char *str) {
    int n = strlen(str);
    for (int i = 0; i < n / 2; i++) {
        char temp = str[i];
        str[i] = str[n - i - 1];
        str[n - i - 1] = temp;
    }
    return str;
}

int main() {
    char str[] = "Hello, World!";
    printf("Original String: %s\n", str);

    // 使用自定义 strrev 函数
    printf("Reversed String: %s\n", myStrrev(str));

    return 0;
}

推荐阅读
cjavapy编程之路首页