给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
输出格式:每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
分析:这串字符串中的每个单词之间都有一个空格,可以通过空格来判断单词的分割。记录每一个空格出现的位置。
然后颠倒去输出单词即可。做法是给开头和末尾也模拟一个空格,使得每一个单词都包含的两个空格之间,使得程序可以统一去处理这些单词的输出。而不用考虑开头和结尾的特殊情形。
代码如下:
#include<stdio.h>
#include<string.h>#define size 81void print(int a ,int b,char *p);//打印函数int main(void)
{char temp[size];gets(temp);int num[size];int k = 1;num[0] = -1;//由于空格不输出,因此这里设置为-1,把初始位置当做一个空格。for(int i = 0; i < strlen(temp);i++)
{
if(' ' == temp[i]){num[k++] = i;//记录空格位置}}num[k] = strlen(temp);//把最后的末位置也当做一个空格
//到此为止,我们num数组之中记录的都是空格的位置,而且开头和结尾也都包含着两个空格之间。for(int i = k; i >= 1; i--){print(num[i-1] + 1,num[i] - 1,temp);}return 0;
}
void print(int a ,int b,char *p)
{for(int i = a; i <= b ; i++){printf("%c",p[i]);}if(0 != a)//最后一个单词后面不能有空格。{printf("%c",' ');}
}