For each list of words, output a line with each word reversed without changing the order of the words.
This problem contains multiple test cases!
The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between output blocks.
Input
You will be given a number of test cases. The first line contains a positive integer indicating the number of cases to follow. Each case is given on a line containing a list of words separated by one space, and each word contains only uppercase and lowercase letters.
Output
For each test case, print the output on one line.
Sample Input
1
3
I am happy today
To be or not to be
I want to win the practice contest
Sample Output
I ma yppah yadot
oT eb ro ton ot eb
I tnaw ot niw eht ecitcarp tsetnoc
分析:
字符串反转。
输入方式用的fgets(s, MAX_N, stdin),一开始用的scanf,结果因为input的诡异格式超时了,当时以为不能用scanf,后来改用fgets,麻烦多了。
找‘ ’和‘\n’,然后一段一段的reverse。input看了半天→_→,还是太年轻。
代码:
#include <cstdio>
#include <cstring>
const int MAX_N = 1010;
char s[MAX_N];
void rev(int pre, int rear) {
int mid = (pre + rear) / 2;
for (int i = pre; i <= mid; i++) {
char t = s[i];
s[i] = s[pre + rear - i];
s[pre + rear - i] = t;
}
}
void solve() {
int len = strlen(s);
int sp = 0, ep = 0;
while (ep < len - 1) {
while (s[ep] != ' ' && s[ep] != '\n') ep++;
rev(sp, ep - 1);
sp = ep + 1;
ep = sp;
}
// puts(s);
}
int main() {
int N, t;
scanf("%d", &N);
getchar();
for (int k = 0; k < N; k++) {
if (k > 0) puts("");
scanf("%d", &t);
getchar();
for (; t > 0; t--) {
fgets(s, MAX_N, stdin);
solve();
printf("%s", s);
}
}
return 0;
}