您的位置:首页 > 其它

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

2016-02-04 16:32 357 查看
对字符串“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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: