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


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


  • 相关阅读:
    爬虫(一)—— 爬取一个简单的网站
    Neutron的安全组原理
    Neutron的防火墙原理
    Openstack Mitaka 负载均衡 LoadBalancerv2
    iptables(四)iptables匹配条件总结之一
    iptables(三)iptables规则管理(增、删、改)
    iptables(二)iptables实际操作之规则查询
    iptables(一)iptables概念
    opensack-mitaka网络性能测试shaker
    neutron二层网络实现
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5181875.html
Copyright © 2020-2023  润新知