1009 说反话 (20 point(s))
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
这个题目的主要难点在于将一段英文从从stdin读入内存,并且隔‘ ’(空格字符)访问。
参考了别人的实现后,我是这么写的:
#include <string.h> #include <stdio.h> int main(){ char sentence[1000]; fgets(sentence, sizeof(sentence), stdin); //printf("%s", sentence); char * pos = NULL; if (strchr(sentence, ' ') == NULL){ printf("%s", sentence); }else{ sentence[strlen(sentence) - 1] = 0; //将句子结尾的回车符号删除 while ((pos = strrchr(sentence, ' ')) != NULL) { printf("%s ", pos + 1); *pos = 0; } printf("%s\n", sentence); } return 0; }
其中,fgets函数的原型为:
char* fgets( char* buff, int buffsize, FILE*); //fgets将读取输入缓冲区一行的文本,包括最后的回车符号。
//如果buffsize过小,将会截取半行,并且在次调用fgets后,将会继续从上次中断的地方开始
strchr 和 strrchr函数
extern char *strchr(const char *s,char c); extern char *strrchr(const char *s,char c); //从前(后)开始找第一次出现字符c的地方,并且返回指针。