嗯....

这道题看起来挺像一个字符串的题,但其实却错了,它实质上却用了一个栈进行了一个模拟(当然还有一种鬼畜的做法,下面也会介绍到.....

首先先看题:

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 青铜 Bronze
 

 题目描述 

给出一个英语句子,希望你把句子里的单词顺序都翻转过来

输入描述 

输入包括一个英语句子。

输出描述 

按单词的顺序把单词倒序输出

样例输入 

I love you

样例输出

you love I

数据范围及提示

简单的字符串操作

思路一:

  因为题目中有“翻转”两个字,首先想到先进后出,直接联想到栈,这里可以用手动栈进行模拟,思路主要是先将所有的字符全部输入,并且将读入的一串字符串倒序压入栈中。

然后用头指针top以此向下遍历,如果找到一个空格,说明这是一个单词,则将这个单词的每个字母依次输出,并加上空格(注意不仅要判断空格,还要特判一下是否为最后一个单词)....并且注意此种思路是对每一个字母进行操作

见手动栈代码:

 1 #include <cstdio>
2 #include <cstring>
3
4
5 using namespace std;
6
7
8 char s[105], stack[105];
9 int main()
10 {
11 int top = -1;//初始化栈为空
12
13 gets(s);//将所有字符读入
14
15 for(int i = strlen(s); i >= 0; i--){//倒序
16 if(s[i] != ' '&& i != 0){// 确定两个边界
17 stack[++top]=s[i];// 只将除空格外的字符入栈
18 }
19 else// 遇到空格或者处理最后一个元素
20 {
21 if(i == 0){//当最后一个元素处理时
22 stack[++top] = s[i];//入栈
23 while(top)//判断栈是否为空
24 printf("%c",stack[top--]);//输出栈,不需加空格
25 }
26 //如果不是处理到最后一个元素,而只是遇到了空格而隔开
27 while(top)//不必加else判断,如果执行了上面的if语句,那么执行完之后栈肯定为空,下面语句不会再执行
28 printf("%c",stack[top--]);
29 printf(" ");//出栈时加上空格
30 }
31 }
32 return 0;
33 }

手动栈

思路二:

  同样是用栈,但是还可以用STL库中的栈,这样避免了头指针的麻烦性。思路大体就是定义一个string类型的栈,将输入的每一个单词作为一个整体压入栈中(注意while语句有坑,当你输入时会输入不完,所以在自己测试中要用Ctrl + z 停止操作,所以还是比较支持手动栈,这种做法不太严谨....)。当栈不为空的时候, 就从顶部输出每一个单词,并且给它在后面加上空格 ....此种思路是对每一个单词进行操作

见STL库栈代码:

 #include<iostream>
#include<cstring>
#include<stack> using namespace std; stack<string> st;// 注意将栈设为字符串类型,压入的每一个元素都可以为一个字符串 int main()
{
string a;//存放单个单词的临时字符串
while(cin>>a)
{
st.push(a);//cin读取第一个单词,push入栈
}
while(!st.empty())//当栈非空时重复下列操作
{
cout<<st.top()<<" "; //输出栈顶元素,即最后一个单词
st.pop();//删除已输出的单词,此时倒数第二个单词为栈顶
}
return ;
}
//自己测试时需Ctrl+Z结束读取

STL栈

思路三:

  这个题当然除了栈还可以用基础的string操作....(感觉这种操作好鬼畜啊QAQ....具体的思路就是用string类型的a来储存每一次读入的单词,我们再用一个string类型的s来储存答案,因为要逆着输出,而这里与上两个思路不太相同,前两个思路都是输出时进行倒序,而这种思路就是存储时就倒着存储...所以将原来s的基础上再在它的前面加上a和空格即可....(太鬼畜了...解释不清楚,还是看代码吧....(注意这种做法也是不太严谨,还是输入时要用Ctrl + z停止输入)

 #include<cstdio>
#include<cstring>
#include<iostream> using namespace std; int main()
{
string a,s;
s=" ";
while(cin>>a)
s=a+" "+s;//即为思路中解释不明白的地方...
cout<<s;
return ;
}

鬼畜操作

嗯....

这三个思路其实哪一个都不错,取决于个人的习惯,思路一和思路二差不多,比较容易思考但代码有难度,但思路三思考起来有点困难,但是代码简便易懂....(总体来说这道题的解法还是比较全的了....

CODEVS 1205 单词反转的更多相关文章

  1. Codevs 1205 单词反转(Vector以及如何输出string)

    题意:倒序输出句子中的单词 代码: #include<cstdio> #include<iostream> #include<string> #include< ...

  2. Codevs 1205 单词翻转

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Description 给出一个英语句子,希望你把句子里的单词顺序都翻转过来 输入 ...

  3. wikioi 1205 单词倒排

    /*====================================================================== 1205 单词翻转 题目描述 Description ...

  4. python文本 字符串逐字符反转以及逐单词反转

    python文本 字符串逐字符反转以及逐单词反转 场景: 字符串逐字符反转以及逐单词反转 首先来看字符串逐字符反转,由于python提供了非常有用的切片,所以只需要一句就可以搞定了 >>& ...

  5. codevs 1729 单词查找树

    二次联通门 : codevs 1729 单词查找树 /* codevs 1729 单词查找树 Trie树 统计节点个数 建一棵Trie树 插入单词时每新开一个节点就计数器加1 */ #include ...

  6. c# 各种排序算法+找第二大的数+句子单词反转

    冒泡排序 // 冒泡排序 bubble sort public static int[] BubbleSort(int []array) { bool isContinue = true; ; i & ...

  7. codevs 3013 单词背诵 hash

    题目链接 题目描述 Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一 ...

  8. codevs 1779 单词的划分

    1779 单词的划分 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description Problem有一个很长的由小写字母组成字符串.为了便于对 ...

  9. [CODEVS1205]单词反转

    给出一个英语句子,希望你把句子里的单词顺序都翻转过来 这个题算是第二次做了……第二次用的C++然而还是写不出来 思路1:用一个数组把读过去的单词存起来,再逆序输出即可 思路2:读入句子后,先在句子开头 ...

随机推荐

  1. 管理react路由的history对象的插件history的使用介绍

    本文介绍如何使用history插件管理浏览记录 history插件的使用 history这个插件可以方便管理你的浏览记录 cnpm install history --save import crea ...

  2. javascipt——基础知识——基本数据类型和逻辑运算

    进制转换:http://www.topthink.com/topic/504.html javascript的数据类型分为基本数据类型和非基本数据类型(对象) 一.基本数据类型: 包括以下部分:数字. ...

  3. python的print字符串的输出

    字符串的输出使用print语句,在每个语句的输出的时候我们使用' '和" "来包含字符串比如: 如果有多个字符串的话呢我们需要用”,“来进行连接: 我们不仅可以使用字符来进行输出时 ...

  4. AudioManager 音量『转』

    获取系统音量 通过程序获取android系统手机的铃声和音量.同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单,AudioManager提供了方法: publicvoidsetStream ...

  5. SQl Server Tsql基本编程 ,循环语句 ,存储过程

    一些比较重要但是不一定经常用的 句子 Tsql定义变量 declare @a int :  定义的变量前面必须用@,数据类型是SQL里的数据类型,执行的时候要把需要的有关联的代码一起执行,单独执行一条 ...

  6. nginx负载均衡, 配置地址带端口

    nginx.conf  配置如下: upstream wlcf.dev.api { server 127.0.0.1:8833; server 127.0.0.2:8833; } server { l ...

  7. 算法Sedgewick第四版-第1章基础-008一用数组实现栈(泛型、可变大小)

    package algorithms.ADT; /*************************************************************************** ...

  8. ARC102D All Your Paths are Different Lengths

    传送门 题目大意 让你构造一个有向图,使得从1到n有L条不同路径且长度分别是0~L-1. 分析 我们不难想到每一对相邻点之间连一条权值为0的边,之后二进制分解,将每一对点之间连一个权值为2^i的边,但 ...

  9. can通信实验

    源码讲解 1.硬件连接 需要两个开发板 2.初始化函数讲解 针对F103的 3.发送函数讲解 4.接收函数讲解 5.main函数讲解

  10. Java NIO学习笔记

    Java NIO学习笔记 一 基本概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执 ...