C语言字符串如何反序:使用双指针法、使用栈、递归实现
在C语言中,反序字符串是一项常见的操作。通过使用双指针法、使用栈、递归实现等方法,可以高效地完成字符串反序。下面将详细介绍其中最常用的双指针法。
一、双指针法
双指针法是反序字符串最常见且高效的一种方法。其核心思想是使用两个指针,一个从字符串的开头开始,另一个从字符串的末尾开始,逐个交换字符,直到两个指针相遇或交错。
实现步骤:
- 初始化指针:定义两个指针,一个指向字符串的第一个字符,一个指向字符串的最后一个字符。
- 逐个交换字符:使用一个循环,交换两个指针所指向的字符,然后将左指针向右移动,右指针向左移动。
- 结束条件:当左指针大于或等于右指针时,停止循环。
代码示例:
#include <stdio.h>
#include <string.h>
void reverseString(char* str) {
int left = 0;
int right = strlen(str) - 1;
while (left < right) {
char temp = str[left];
str[left] = str[right];
str[right] = temp;
left++;
right--;
}
}
int main() {
char str[] = "Hello, World!";
printf("Original String: %sn", str);
reverseString(str);
printf("Reversed String: %sn", str);
return 0;
}
二、使用栈
栈是一种后进先出(LIFO)的数据结构,非常适合用来反序字符串。其核心思想是将字符串中的每个字符依次压入栈中,然后再依次弹出,这样字符的顺序就被反转了。
实现步骤:
- 创建栈:定义一个栈,用于存储字符串中的字符。
- 压入栈:遍历字符串,将每个字符依次压入栈中。
- 弹出栈:创建一个新的字符串,依次从栈中弹出字符并存入新的字符串中。
代码示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 定义栈结构
typedef struct {
char* data;
int top;
int capacity;
} Stack;
void initStack(Stack* stack, int capacity) {
stack->data = (char*)malloc(sizeof(char) * capacity);
stack->top = -1;
stack->capacity = capacity;
}
int isFull(Stack* stack) {
return stack->top == stack->capacity - 1;
}
int isEmpty(Stack* stack) {
return stack->top == -1;
}
void push(Stack* stack, char ch) {
if (isFull(stack)) return;
stack->data[++stack->top] = ch;
}
char pop(Stack* stack) {
if (isEmpty(stack)) return '