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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单词字符串儿翻转,栈实现!相关的知识,希望对你有一定的参考价值。

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


以上是关于单词字符串儿翻转,栈实现!的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第151题—翻转字符串里的单词—Python实现

php实现字符串翻转,使字符串的单词正序,单词的字符倒序

[C/C++笔面试]编程实现字符串中各单词的翻转

翻转单词顺序列

C语言实现来实现字符串反转,只有单词顺序反转,组成单词的字母不反转

LintCode翻转字符串问题 - python实现