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成绩排名”那题完全一样。
由本题所学:
- 字符串的输入函数:getchar(),每次从键盘读入一个字符;gets(str),一次性读取一串字符,包括空格也行(但会溢出,不够安全);
- 还有fgetc()、fgets(),用到再学。但如果是用scanf("%s",str)的话,printf的时候遇到' '(空格)就结束了,所以不好用。(附scanf函数的详细说明)。
- '\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
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- PAT 1009. 说反话
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- 1009. 说反话
- 1009. 说反话 (20)
- PAT 1009. 说反话
- 1009. 说反话
- 1009. 说反话
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- 1009. 说反话 (20)
- 【安卓与物联网】Arduino开发板与Android之间通信
- 实验吧 web forms
- 解决library not found for -lPods-AFNetworking问题
- 发布mvc 报错403.14-Forbidden Web 服务器被配置为不列出此目录的内容
- Atitti.数据操作crud js sdk dataServiceV3设计说明
- 1009. 说反话
- Maven Scrop分析
- vs常见问题
- HDU 1174 爆头(几何---叉积)
- hdu 1671 Phone List
- PHP7之新增运算符
- UVALive 4617 Simple Polygon(顺/逆时针输出所有点/极角排序)
- java-利用synchronized实现volatile的功能
- 网页元素居中问题