字符串儿翻转,栈实现!

对字符串“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(resultPtr);
        resultPtr=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

字符串儿翻转,栈实现!

时间: 2024-11-19 11:08:31

字符串儿翻转,栈实现!的相关文章

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

对字符串"this is very good"进行翻转,即"good very is this".注意每一个单词仍是正序 思路: 1.字符串的翻转的问题.能够使用栈实现. 2.先把全部字符翻转,然后对再对某一个单词翻转,终于实现题目要求. C语言代码例如以下: 先把简单的栈实现列出来: #ifndef dataStruct_myStack_h #define dataStruct_myStack_h #define kStacksize 100 typedef st

【C语言】将字符串顺序翻转,如: I am a student 转成:student a am I

//将字符串顺序翻转 //如: I am a student 转成:student a am I #include <stdio.h> #include <string.h> void fanw( char *left,char *right ) //把每个单词单词翻转 { char* pleft = left; char* pright = right; char temp; while( pleft < pright ) { temp = *pleft; *pleft =

【算法】字符串问题——翻转字符串

/** * 翻转字符串' * 给定一个字符类型的数组chas,请在单词间作逆序调整.只要做到单词顺序逆序即可. * 例如,如果看成字符串"dog loves pig",则调整为"pig loves dog" * 过程:先整体逆序,在局部单词逆序 */ public static void rotateWord(char[] chas) { if (chas == null || chas.length <= 0) { return; } reverse(cha

【55测试】【字符串】【栈】【找规律】

集训第二天,额,考崩了. 第一题 hao 大意:(这个名字就不要在意了,其实是祖玛游戏) 模拟祖玛游戏的模式,给一个'A'~'Z'的字符串,然后有t个插入操作为 “ 添加后的在原字符串的位置 x  插入元素 c ”,字符串中有超过或等于 3 个相同的字符,则被消除,输出每次操作后剩余的字符串,如果为空,则输出“-”. 样例: ACCBA                     输出:  ABCCBA 5   AABCCBA 1 B AABBCCBA 0 A - 2 B A 4 C 0 A 解:

【字符串】实现字符串的翻转

1 import java.util.Scanner; 2 3 /** 4 * 功能:字符串翻转,例如how are you 翻转为you are how 5 */ 6 public class Main5 { 7 8 public String swap(String string) { 9 10 if (string == null) { 11 return null; 12 } 13 14 String[] strings = string.split(" "); 15 16 S

[LeetCode]394. 字符串解码(栈)

题目 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. 你可以认为输入字符串总是有效的:输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的. 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像?3a?或?2[4]?的输入. 示例: s = "3[a]2[bc]", 返回 "aaabcbc&

python输入一个字符串,输出翻转后的字符串(翻转字符串)

题目:输出一个字符串,输出翻转后的字符串.例如:输入字符串a123,输出321a. 方法一:使用列表的reverse方法 1 string=input('请输入一个字符串:') 2 lst=list(string) #使用列表,将列表转化为字符串 3 lst.reverse() 4 print(''.join(lst)) 运行结果: 请输入一个字符串:abc123 321cba 方法二:切片法 1 def reverse(): 2 s=input("请输入一个字符串:") 3 retu

字符串的翻转

有一个字符串"student am i",将它转换为"i am student".(空间复杂度为O(1)) 实现代码: void swap(char *left, char *right ) { char *ret = left ; while (left < right) { int temp = *left ; * left = *right ; * right = temp; left++; right--; } } char* Reverse(cons

字符串反转,栈模拟(ZOJ1151)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151 这里可以用栈模拟,也可以用STL,reverse();函数. 但是我这里用栈模拟,PE了,了解一下这个做法吧. #include <cstdio> #include <iostream> #include <algorithm> #include <string.h> #include <string> usin