1009. 说反话

来源:互联网 发布:映美620k驱动端口 编辑:程序博客网 时间:2024/06/14 08:16

1009. 说反话 (20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
基本思路:拿到题目时第一反应是把输入的字符串存到一个二维数组里,因为二维数组  array[i][j] 可以表示存有i个单词,其中每个单词长度为j。
这样,在输出时,只要printf("%s",array[i]);就好了(相当于i即为每个单词的编号)。这个二维数组的利用和“1004成绩排名”那题完全一样。
由本题所学:
  1. 字符串的输入函数:getchar(),每次从键盘读入一个字符;gets(str),一次性读取一串字符,包括空格也行(但会溢出,不够安全);
  2. 还有fgetc()、fgets(),用到再学。但如果是用scanf("%s",str)的话,printf的时候遇到' '(空格)就结束了,所以不好用。(附scanf函数的详细说明)。
  3. '\0',即空字符。判断一个字符串是否结束的标志就是看是否遇到‘\0’,如果遇到‘\0’,则表示字符串结束。(今天的题就是掉这个坑啦!切记)
第一遍写完的代码:(注意错的地方)
#include<stdio.h> #include<string.h>int main(void){int i,j=0,n=0;char input[81],output[81][20];//s_out可以存放81个词,每个词最长为20 gets(input);for( i = 0; i < strlen( input ); i++ ){if( input[i] != ' '){output[j][n++]= input[i];}else{j++;n = 0;}}for(;j>=0;j--){if(j!=0){printf("%s ",output[j]);}elseprintf("%s",output[j]);}return 0;}

上面这个代码虽然在电脑上输出的形式是正确的,但就是A不了。后来看了别人的答案才发现是有一个很基础的点没有掌握,即上面提到的字符串的空字符的问题。
下面为修改过的:
#include<stdio.h> #include<string.h>int main(void){int i,j=0,n=0;char input[81],output[81][20];//s_out可以存放81个词,每个词最长为20 gets(input);for( i = 0; i < strlen( input ); i++ ){if( input[i] != ' '){output[j][n++]= input[i];}else{output[j][n] = '\0'; //<span style="font-family: 'Droid Sans Mono', Consolas, 'Courier New', monospace;">很重要</span>j++;n = 0;}}output[j][n] = '\0'; //这里需要注意的是,当输入最后一个单词后,就跳出循环了,导致最后一个单词结尾未能写入'\0',故在循环外加这一句for(;j>=0;j--){if(j!=0){printf("%s ",output[j]);}elseprintf("%s",output[j]);}return 0;}

再稍微简洁点的:
#include<stdio.h>int main(void){char c, output[81][20];int i=0, j=0;while( (c=getchar()) != '\n'){if( c != ' ' ){output[i][j++] = c;}else{output[i][j] = '\0';//用来说明一个单词记录结束了,'\0'是一个字符串结束的标志,如果不加这句话,他是不知道的 i++;j=0;}}output[i][j] = '\0';//最后一个单词的结束,因为输入最后一个字母后就跳出while循环了,所以放这里 for(; i>=0;i--){if(i!=0){printf("%s",output[i]);printf(" ");}elseprintf("%s",output[i]);}return 0;}

0 0
原创粉丝点击