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