zoukankan      html  css  js  c++  java
  • 单词、字符串儿翻转,栈实现!

    对字符串“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
    ",str);
            char* reversal= (char*)calloc(1, 100);
            char* result= (char*)calloc(1, 100);
            int length=0;
            
            //1.翻转全部字符串
            reverString(str,strlen(str),reversal);
            printf("%s
    ",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(result);
            result=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


  • 相关阅读:
    postman一健导入swagger api所有接口
    pycharm 通过project interpreter国内镜像源设置
    Linux常用软件tree,autojump,lrzsz安装
    文献下载好用网站推荐
    SCIP,Clp,Gurobi和Cplex安装
    Linux下SuperLU安装
    【微服务理论】康威定律
    项目实战:动态系统的设计(类似朋友圈)
    认知提升:工作和薪资
    博客园美化 Cnblogs-Theme-SimpleMemory
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5181875.html
Copyright © 2011-2022 走看看