杭电hdu1062解析

杭电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()读取一行并进行处理。

解析

  1. 对于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;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值