输入一个可能包含若干(至少1个)单词的句子(可以假设每个单词之间有且仅有一个空格,标点符号视为单词的组成部分),输出每个单词逆置后的英文句子(参看样例输出)。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入一个字符串(长度不超过80),表示英文句子。
输出格式:
对于每组测试,输出每个单词逆置后的英文句子。
输入样例:
1
emoclew era uoY
输出样例:
welcome are You
代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct statck {
char* top;
char* base;
int stacklength;
}*Sqstack, stack;
Sqstack initStack(Sqstack s) {
s->base = (Sqstack)malloc(sizeof(char) * 81);
s->top = s->base;
s->stacklength = 81;
return s;
}
void Push(char ch, Sqstack s) {
if (s->top - s->base == s->stacklength)
return;
*s->top++ = ch;
return;
}
int Pop(Sqstack s, char* e) {
if (s->top == s->base)
return 0;
*e = *--s->top;
return 1;
}
void rotate(char arr[]) {
char ch;
int n = strlen(arr), i = 0;
Sqstack s = (Sqstack)malloc(sizeof(stack));
initStack(s);
while (arr[i] != '\0') {
while (arr[i] != ' ' && arr[i] != '\0') {
Push(arr[i], s);
i++;
}
while (Pop(s, &ch) != 0) {
printf("%c", ch);
}
free(s->base);
s = initStack(s);
if (arr[i] != '\0') {
i++;
printf(" ");
}
}
printf("\n");
}
int main() {
char arr[81];
int T, m = 0;
scanf("%d", &T);
getchar();
while (T--) {
gets(arr);
rotate(arr);
}
return 0;
}