1、使用两个指针进行交换
#include <stdio.h>
#include <string.h>
void reverse_string(char *str) {
if (str == NULL)
return;
char *start = str;
char *end = str + strlen(str) - 1;
while (start < end) {
// 交换两个指针指向的字符
char temp = *start;
*start = *end;
*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_recursive(char *str, char *left, char *right) {
if (left >= right)
return;
// 交换左右指针的字符
char temp = *left;
*left = *right;
*right = temp;
// 递归调用
reverse_string_recursive(str, ++left, --right);
}
void reverse_string(char *str) {
if (str == NULL)
return;
reverse_string_recursive(str, str, str + strlen(str) - 1);
}
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(char *str) {
if (str == NULL)
return;
char *end = str + strlen(str) - 1;
char temp;
while (str < end) {
// 交换两个指针指向的字符
temp = *str;
*str++ = *end;
*end-- = temp;
}
}
int main() {
char str[] = "Hello, World!";
printf("Original string: %s\n", str);
// 调用反转函数
reverse_string(str);
printf("Reversed string: %s\n", str);
return 0;
}
4、使用 XOR 运算进行交换
#include <stdio.h>
#include <string.h>
void reverse_string(char *str) {
if (str == NULL)
return;
char *start = str;
char *end = str + strlen(str) - 1;
while (start < end) {
// 使用 XOR 交换两个指针指向的字符
*start ^= *end;
*end ^= *start;
*start ^= *end;
// 移动指针
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;
}
5、利用临时数组
#include <stdio.h>
#include <string.h>
void reverse_string(char *str) {
if (str == NULL)
return;
int len = strlen(str);
char temp[len];
// 将字符串逆序复制到临时数组中
for (int i = 0; i < len; i++) {
temp[i] = str[len - 1 - i];
}
// 将临时数组的内容复制回原字符串
for (int i = 0; i < len; i++) {
str[i] = temp[i];
}
}
int main() {
char str[] = "Hello, World!";
printf("Original string: %s\n", str);
// 调用反转函数
reverse_string(str);
printf("Reversed string: %s\n", str);
return 0;
}