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; }