【c++】说反话加强版【存疑】
2016-03-29 21:36
519 查看
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
输出样例:
解决思路:
建立两个栈a和b,从输入流中读入1个字符,如果不为空格,则将其压入栈a;
如果读入的字符不为空格
2.1 则判断栈a是否为空,如果栈a不为空,则将栈a的元素依次全部出栈,然后压入栈b。栈a为空,什么也不做
2.2 判断栈b是否为空,栈b不为空,则从栈b中出栈一个元素,判断该元素是否为空格,如果该元素为空格,则重新将其压入栈中。如果该元素不为空格,则重新将该元素入栈,同时压入一个空格。
2.3如果栈b为空,则直接压入一个空格。
读入下一个字符,重复过程1,2,直到遇到’\n’;
判断栈a是否为空,不为空,则将a中的元素全部压入b.
将b中的元素打印输出。
程序代码:
这段代码通过了一个测试用例,其他的显示格式错误或者段错误,原因还没找到,存疑。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
解决思路:
建立两个栈a和b,从输入流中读入1个字符,如果不为空格,则将其压入栈a;
如果读入的字符不为空格
2.1 则判断栈a是否为空,如果栈a不为空,则将栈a的元素依次全部出栈,然后压入栈b。栈a为空,什么也不做
2.2 判断栈b是否为空,栈b不为空,则从栈b中出栈一个元素,判断该元素是否为空格,如果该元素为空格,则重新将其压入栈中。如果该元素不为空格,则重新将该元素入栈,同时压入一个空格。
2.3如果栈b为空,则直接压入一个空格。
读入下一个字符,重复过程1,2,直到遇到’\n’;
判断栈a是否为空,不为空,则将a中的元素全部压入b.
将b中的元素打印输出。
程序代码:
#include<iostream> #include<cstdio> using namespace std; #define MAX 500 struct stack { char data[MAX]; char* top; }; void initStack(stack &a); char pushStack(stack &a); void popStack(stack &a, char c); int isStackEmpty(const stack &a); int main() { stack a ; stack b; initStack(a); initStack(b); char temp; char c; scanf("%c",&c); while(c!='\n') { if(c!=' ') popStack(a,c); else { while(!isStackEmpty(a)) { temp = pushStack(a); popStack(b,temp); } /*if(isStackEmpty(a)) popStack(a,c);*/ if(!isStackEmpty(b)) { temp = pushStack(b); if(temp==' ') popStack(b,temp); else { popStack(b,temp); popStack(b,' '); } } else popStack(b,' '); } scanf("%c",&c); } while(!isStackEmpty(a)) { temp =pushStack(a); popStack(b,temp); } while(!isStackEmpty(b)) { temp =pushStack(b); cout<<temp; } return 0; } void initStack(stack &a) { a.top =a.data; } void popStack(stack &a, char c) { a.top+=1; *a.top=c; } char pushStack(stack &a) { char temp = *a.top; a.top-=1; return temp; } int isStackEmpty(const stack &a) { if(a.top==a.data) return 1; else return 0; }
这段代码通过了一个测试用例,其他的显示格式错误或者段错误,原因还没找到,存疑。
相关文章推荐
- c++复习要点总结之九——继承二
- BZOJ 3049: [Usaco2013 Jan]Island Travels
- 2016第七届蓝桥杯C/C++ B组省赛第五题:抽签
- VC++6.0常出现的后缀名及其含义大全
- day(1)
- stm32建c++与c混合工程遇到的问题及解决
- C++ protected访问权限思考
- 结对项目— 词频统计2(语言C++)
- C/C++ sizeof操作符
- 比较java与c语言中数字转换成字符的不同
- c++new失败处理
- C++实验二:正整数
- C++学习(2.1): 基本内置类型
- c++之 引用&参数传递
- 游戏角色中的类
- 游戏角色中的类
- 游戏角色中的类
- 游戏角色中的类
- 游戏角色中的类
- 即使没人看我们也要坚持写Blog