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