反转字符串的方法其实蛮多的,本文主要介绍使用堆栈来实现,思路其实比较简单,就是把字符串的字符依次压栈,然后最后再依次出栈即可。我们使用这个例子的主要目的就是希望大家能够熟练使用堆栈。
c语言的实现如下:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> // 使用数组来实现堆栈 struct Stack { int top; unsigned capacity; char* array; }; // 创建一个堆栈 struct Stack* createStack(unsigned capacity) { struct Stack* stack = (struct Stack*) malloc(sizeof(struct Stack)); stack->capacity = capacity; stack->top = -1; stack->array = (char*) malloc(stack->capacity * sizeof(char)); return stack; } int isFull(struct Stack* stack) { return stack->top == stack->capacity - 1; } int isEmpty(struct Stack* stack) { return stack->top == -1; } // 压栈 void push(struct Stack* stack, char item) { if (isFull(stack)) return; stack->array[++stack->top] = item; } // 出栈 char pop(struct Stack* stack) { if (isEmpty(stack)) return INT_MIN; return stack->array[stack->top--]; } // 反转字符串 void reverse(char str[]) { // 创建一个字符串长度的堆栈 int n = strlen(str); struct Stack* stack = createStack(n); // 把所有的字符串内容都压栈 int i; for (i = 0; i < n; i++) push(stack, str[i]); // 再出栈就ok了 for (i = 0; i < n; i++) str[i] = pop(stack); } int main() { char str[] = "ReverseTest"; reverse(str); printf("Reversed string is %s", str); getchar(); return 0; }
若是上文有任何错误或者您有任何想法都可以在下面的评论中提出。
本文首发于东岚之音:www.dlvoice.com,转载请保留此语句。