1、使用指针交换字符
C 中,可以使用两个指针,一个指向字符串的开头,另一个指向字符串的末尾,交换它们指向的字符,直到指针相遇。
#include <stdio.h> #include <string.h> void reverse_string(char *str) { int start = 0; int end = strlen(str) - 1; // 交换字符直到两个指针相遇 while (start < end) { // 交换 char temp = str[start]; str[start] = str[end]; str[end] = temp; // 移动指针 start++; end--; } } int main() { char str[] = "Hello, World!"; printf("Original string: %s\n", str); reverse_string(str); printf("Reversed string: %s\n", str); return 0; }
2、使用数组和栈
如想避免直接使用指针交换字符,也可以使用栈来反转字符串。这种方法通常不是最有效的,但它提供了一种不同的解决思路。
#include <stdio.h> #include <string.h> void reverse_string(char *str) { int length = strlen(str); char temp[length + 1]; // 将字符串反向存入临时数组 for (int i = 0; i < length; i++) { temp[i] = str[length - 1 - i]; } temp[length] = '\0'; // 添加字符串终止符 // 将反转后的字符串复制回原字符串 strcpy(str, temp); } int main() { char str[] = "Hello, World!"; printf("Original string: %s\n", str); reverse_string(str); printf("Reversed string: %s\n", str); return 0; }
3、使用递归反转字符串
也可以使用递归来反转字符串,尽管这种方法不是最优的,因为它会增加函数调用的开销。
#include <stdio.h> #include <string.h> void reverse_string_recursive(char *str, int start, int end) { if (start >= end) { return; } // 交换字符 char temp = str[start]; str[start] = str[end]; str[end] = temp; // 递归调用 reverse_string_recursive(str, start + 1, end - 1); } int main() { char str[] = "Hello, World!"; printf("Original string: %s\n", str); reverse_string_recursive(str, 0, strlen(str) - 1); printf("Reversed string: %s\n", str); return 0; }