1009. 说反话 (20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
输出格式:每个测试用例的输出占一行,输出倒序后的句子。
输入样例:Hello World Here I Come输出样例:
Come I Here World Hello
这个其实比较简单,但是我首先想到的是用栈来解决,代码如下
#include<stdio.h>
#include<stdlib.h>
typedef struct StackNode*Stack;
typedef char* ElementType;
struct StackNode
{
int TopOfStack;
int Capacity;
ElementType*Element;
};
int IsEmpty(Stack S)
{
return S->TopOfStack == -1;
}
int IsFull(Stack S)
{
return S->TopOfStack == S->Capacity - 1;
}
ElementType Pop(Stack S)
{
return S->Element[S->TopOfStack--];
}
void Push(Stack S, ElementType X)
{
S->Element[++S->TopOfStack] = X;
}
Stack CreateStack(int N)
{
Stack S = (Stack)malloc(sizeof(struct StackNode));
S->Capacity = N;
S->TopOfStack = -1;
S->Element = (ElementType*)malloc(sizeof(ElementType)*N);
return S;
}
void ReverseSentence(char * str)
{
char s[20][20];
int count = 0;
int i = 0;
int j = 0;
Stack S = CreateStack(20);
while (str[i] != '\0')
{
if (str[i] == ' ')
{
s[j][count] = '\0';
Push(S, s[j]);
j++;
count = 0;
i++;
continue;
}
s[j][count++] = str[i++];
}
s[j][count] = '\0';
Push(S, s[j]);
int flag = 0;
while (!IsEmpty(S))
{
if (flag)
printf(" ");
else
flag = 1;
printf("%s", Pop(S));
}
}
int main()
{
char a[81];
char c;
int i = 0;
while ((c = getchar()) != '\n')
a[i++] = c;
a[i] = '\0';
ReverseSentence(a);
}