HZNUOJ

Input-Output Lecture (4) for ACM Freshman

Tags:     字符串模拟
Time Limit:  1 s      Memory Limit:   32 MB
Submission:1834     AC:1230     Score:31.12

Description

输入一个字符串,将其逆序输出。

Input

第一行是一个数字T,代表有T组测试数据。

接下来有T行,每行为一个可能含空格的字符串,字符串长度不超过100。

Output

对于每组输入,输出逆序后的字符串,并且每组测试数据之间用一个空行隔开。

Samples

input
3 Hangzhou I love you A HZNUer
output
uohzgnaH uoy evol I reUNZH A

Hint

不同于Lecture (3),此题是需要在每组输出间加一个空行,但由于本题已经告诉你测试数据数量了,因此可通过判断当前是不是最后一组测试数据来决定是否加空行。除此之外,此题需要读入空格,我们平时用的scanf/cin无法实现该功能,所以此处需要使用gets/getline来进行读入,需要注意的是gets和getline会读入输入缓冲区中滞留的回车符,而恰巧scanf和cin在读入整数(scanf若读入char会有区别)时会在输入缓冲区留下回车符(相反,gets/getline不会),因此需要在使用gets/getline之前要吸收掉(或清掉)scanf和cin滞留下来的回车符。另外注意使用C风格字符串时,数组大小需要至少101(要为'\0'预留一个空位)。
因此我们可以写出如下代码:
C语言版:
#include<stdio.h>
#include<string.h>
int main() {
	int i, len, T;
	char str[101];
	scanf("%d", &T);
	getchar(); // scanf会在输入缓冲区留下回车符,此处用getchar消去
	while (T--) {
		gets(str);
		len = strlen(str);
		for (i = len - 1; i >= 0; i--)
			printf("%c", str[i]);
		if (T) puts("\n");
		else puts("");
	}
	return 0;
}

C++版:
#include<iostream>
#include<string>
using namespace std;
int main() {
	int len, T;
	string str;
	cin >> T;
	getline(cin, str); // 取走缓冲区回车符
	while (T--) {
		getline(cin, str);
		len = str.length();
		for (int i = len - 1; i >= 0; i--)
			cout << str[i];
		if (T) cout << endl << endl;
		else cout << endl;
	}
	return 0;
}

Author

CHEN, Yupeng