杭电hdu1062解析
文字反转
时间限制:2000/1000 MS(Java /其他)内存限制:65536/32768 K(Java /其他)
提交总数:54062接受提交:20641
问题描述
伊格纳修斯喜欢用相反的方式写词。给定由Ignatius编写的单行文本,您应该反转所有单词,然后输出它们。
输入项
输入包含几个测试用例。输入的第一行是单个整数T,它是测试用例的数量。随后是T测试用例。
每个测试用例包含一行并包含多个单词。一行中最多有1000个字符。
输出量
对于每个测试用例,您应该输出已处理的文本。
样本输入
3
olleh !dlrow
m’I morf .udh
I ekil .mca
hello world!
I’m from hdu.
I like acm.
暗示
请记住,在整数T之后使用getchar()读取’\ n’,然后可以使用gets()读取一行并进行处理。
解析
- 对于Hint里的提示还是要重视的
读取3之后,如果读取方式有所偏差,那么可能会有\n留下,需要读取掉。
尝试采用栈来处理
#include<stack>
#include<iostream>
#include<cstdio>
using namespace std;
int main() {
int n, i, num;
char ch;
stack<char> s;
scanf("%d", &n);
getchar();
for (i = 0; i < n; i++) {
while (true) {
//如何处理读取步骤很是关键
//读取时 遇到空格 EOF 换行时 都应该输出
//输出完成之后可以继续读取下一个字符
//ch的位置不能放错 不然栈会溢出
ch = getchar();
if (ch != ' ' && ch != '\n' && ch != EOF)s.push(ch);
else {
while (!s.empty()) {
printf("%c", s.top());
s.pop();
//注意格式问题
num++;
if(!(num%1000))printf("\n");
}
//结尾不能加空格!!
if(ch == ' ')printf(" ");
num++;
if (!(num % 1000))printf("\n");
}
if (ch == '\n' || ch == EOF)break;
}
printf("\n");
}
}
return 0;
}