C语言如何把字符串逆序输出?
核心观点:使用双指针法、使用栈、递归法。其中,使用双指针法是最常用且高效的一种方法。通过两个指针分别指向字符串的头和尾,然后交换这两个指针所指向的字符,指针逐渐向中间移动,直到相遇。这种方法时间复杂度为O(n),空间复杂度为O(1),非常适合大部分场景。
一、使用双指针法
双指针法是逆序输出字符串的一种高效方法。该方法通过设置两个指针,一个指向字符串的起始位置,一个指向字符串的末尾位置,然后交换这两个位置的字符,逐渐向中间移动,直到两个指针相遇。
1.1 实现步骤
- 初始化两个指针,一个指向字符串的开头(left),一个指向字符串的末尾(right)。
- 在left小于right的条件下,交换left和right指针所指向的字符。
- 移动left指针向右,移动right指针向左。
- 重复步骤2和3,直到left大于等于right。
1.2 示例代码
#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!";
reverseString(str);
printf("Reversed string: %sn", str);
return 0;
}
这段代码展示了如何使用双指针法来逆序输出一个字符串。注意,在交换字符时,需要使用一个临时变量来存储字符的值,以避免数据丢失。
二、使用栈
栈是一种后进先出(LIFO)的数据结构,非常适合用于逆序输出字符串。将字符串中的每个字符依次压入栈中,然后依次出栈,这样就能实现字符串的逆序输出。
2.1 实现步骤
- 初始化一个空栈。
- 遍历字符串中的每个字符,将其压入栈中。
- 将栈中的字符依次弹出,并存储在新的字符串中。
- 输出新的字符串。
2.2 示例代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Stack {
char* data;
int top;
int capacity;
} Stack;
Stack* createStack(int capacity) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->data = (char*)malloc(capacity * sizeof(char));
stack->top = -1;
stack->capacity = capacity;
return stack;
}
void push(Stack* stack, char ch) {
if (stack->top == stack->capacity - 1) {
return;
}
stack->data[++stack->top] = ch;
}
char pop(Stack* stack) {
if (stack->top == -1) {
return '