嗯....

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

首先先看题:

时间限制: 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库栈代码:

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

STL栈

思路三:

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

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4
 5 using namespace std;
 6
 7 int main()
 8 {
 9     string a,s;
10     s=" ";
11     while(cin>>a)
12            s=a+" "+s;//即为思路中解释不明白的地方...
13     cout<<s;
14 return 0;
15 }

鬼畜操作

嗯....

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

转载于:https://www.cnblogs.com/New-ljx/p/10473621.html

CODEVS 1205 单词反转相关推荐

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

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

  2. c语言单词字母翻转,C语言来实现字符串反转(只有单词反转,单词里的字母不反转)...

    用C/C++来实现字符串的反转.比如:字符串"I am a good developer!"反转之后变成了"developer! Good a am I".(只 ...

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

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

  4. 字符串里面的单词反转

    字符串里面的单词反转,可以用string/stringBuilder View Code using System; using System.Collections; using System.Te ...

  5. codevs 1729 单词查找树

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

  6. [校招] 英文句子单词反转 - 哔哩哔哩 2020

    [校招] 英文句子单词反转 - 哔哩哔哩 2020 描述 原地翻转句子中单词的顺序,但单词内字符的顺序不变.要求:空间复杂度O(1),时间复杂度O(n). 输入 英文句子中单词以一个空格符隔开.为简单 ...

  7. 字符串单词反转java_Java 字符串反转实现代码

    Java 字符串反转 问题: 给一个字符串,比如 "I love china", 把字符反转后变成 "china love I" 思路: 先把字符串从第一个字符 ...

  8. [CODEVS1205]单词反转

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

  9. codevs 1779 单词的划分

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

最新文章

  1. CentOS 5.5 编译安装apache+php+mysql,利用CMS快速建立论坛
  2. hdu 4501 小明系列故事——买年货 多重背包
  3. springboot集成测试时@RunWith和@SpringBootTest爆红不能测试
  4. 【11_83】Remove Duplicates from Sorted List
  5. iphone投屏_iPhone投屏电视机/投影仪用这个方法很简单,媲美华为PC模式
  6. java 类似datatable_在java中实现类似于.net中的DataTable,请各位看看,这种方法可行吗?...
  7. 2021年南阳市五中高考成绩查询,南阳市“赫赫有名”的五大高中,2020年高考成绩一目了然!...
  8. internet信息服务(IIS)管理器 在哪里?
  9. php语句insert,SQL INSERT INTO
  10. php面向对象开发技术 课本,PHP面向对象编程-高级技术书 - php
  11. 微信小程序:好看的表格样式
  12. Postman如何生成测试报告
  13. 美国公布自动驾驶新政AV4.0;微软Access数据库出现漏洞,或致8.5万家企业面临风险;苹果谈论隐私问题……...
  14. 查询MAC地址和接口的对应关系
  15. 一个完整react项目的目录结构
  16. 音质卓越颜值在线,五款高人气头戴式HIFI音质蓝牙耳机排名
  17. Linux下查看隐藏文件夹
  18. Bugly SDK 集成使用
  19. 微信小程序:简洁界面清爽让人非常舒服的一款短视频去水印微信小程序
  20. 1. 将数据导入到前置数据库中(MySQL)

热门文章

  1. invalid use of null value
  2. 配置gitlab通过smtp发送邮件
  3. 一个关于python装饰器参数的问题
  4. Git 初始化版本库
  5. 物理路径与虚拟路径 及Web Server
  6. 错误C4996:'std :: _Copy_impl'
  7. C++ set的一些用法
  8. Linux压缩和解压缩命令汇总(tar命令汇总)
  9. vue-element-admin中 vuex 的使用
  10. java 8是指什么_java中8个基本数据类型到底是指什么?是什么意思,有什么作用?我需要权威的回答,...