首页 > 代码库 > 字符串儿翻转,栈实现!

字符串儿翻转,栈实现!

对字符串“this is very good”进行翻转,即“good very is this”;注意每个单词仍是正序

思路:

1.字符串的翻转的问题,可以使用栈实现。

2.先把所有字符翻转,然后对再对某一个单词翻转,最终实现题目要求。

C语言代码如下:

先把简单的栈实现列出来:

#ifndef dataStruct_myStack_h
#define dataStruct_myStack_h

#define kStacksize 100

typedef struct{
    void* entity[kStacksize];
    int top;
    }myStack;

myStack* initStack();
void push(myStack* s,void* p);
void* pop(myStack* s);
void freeStack(myStack* s);
#endif
#include <stdlib.h>
#include "myStack.h"

//
myStack* initStack(){
    myStack* s = (myStack*)malloc(sizeof(myStack));
    memset(s->entity,0,sizeof(kStacksize));
    s->top = -1;
    return s;
}
//
void push(myStack* s,void* p){
    if(s->top < kStacksize-1){
        s->entity[++s->top] = p;
    }
}
//
void* pop(myStack* s){
    if (s->top>=0 && s->top < kStacksize) {
        return s->entity[s->top--];
    }
    return NULL;
}
//
void freeStack(myStack* s){
    free(s);
}

具体的调用。

 int main   {
        //0.输出原始字符串
        char* str = "this is very good";printf("%s\n",str);
        char* reversal= (char*)calloc(1, 100);
        char* result= (char*)calloc(1, 100);
        int length=0;
        
        //1.翻转所有字符串
        reverString(str,strlen(str),reversal);
        printf("%s\n",reversal);
        
        //2.翻转单词
        char* index = reversal;
        char* reversalPtr = reversal;
        char* resultPtr = result;
        while (*index) {
            if (*index ==' ') {
                reverString(reversalPtr,length,resultPtr);
                reversalPtr= index+1 ;
                resultPtr += length;
                *(resultPtr++) = ' ';
                length = 0;
            }
            else {
                length++;
            }
            index ++;
        }
        
        //3.最后一个单词,翻转一下。
        reverString(reversalPtr,length,resultPtr);
        printf("%s",result);
        
        //4.清理数据
        free(reversal);
        reversalPtr=NULL;
        free(resultPtr);
        resultPtr=NULL;
    }
void reverString(char* str,int length,char*buffer){
    if (length<=0) {
        return;
    }
    myStack * stack = initStack();
    int i=0;
    while (i<length) {
        push(stack,str);
        str++;
        i++;
    }
    //1.整体翻转过来
    char* tmp;
    while (tmp =(char*)pop(stack)) {
        *buffer = *tmp;
        buffer++;
    }
    freeStack(stack);
}

输出结果是:

this is very good

doog yrev si siht

good very is this