• 单词、字符串儿翻转,栈实现!


    对字符串“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


  • 相关阅读:
    谷歌浏览器无法携带cookie问题
    如何言简意赅表达你需要寻求开发协助?
    vue传参params参数不能混用?
    浅谈JS变量声明和函数声明提升
    如何提高你的CSS水平
    闭包,看这一篇就够了——带你看透闭包的本质,百发百中
    Vue-给对象新增属性(使用Vue.$set())
    PHP const问题
    Linux/U-boot version with "-dirty"
    360度评估互评如何避免恶意打分
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5181875.html
Copyright © 2020-2023  润新知