ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pat(乙)1009 说反话 (20 分)

2022-01-10 21:02:00  阅读:185  来源: 互联网

标签:空格 pat int MAX 单词 1009 ans 20 include


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

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

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

输入样例:
Hello World Here I Come

输出样例:
Come I Here World Hello

思路:
用cin.getline()读取一行字符,以空格为分隔符来划分单词,依次将单词读入二维数组,最后逆序输出二维数组输入的单词

AC代码:

#include<cstdio>
#include<cstring>
#include<iostream>
//#include<algorithm>
//#include<vector>
using namespace std;
const int MAX = 90;

int main()
{
	char str[MAX];
	//gets(str); 要使用gets必须把头文件全换成c语言配套的,并且把所有c++头文件注释掉,例如cstdio-->stdio.h,否则在pat上无法通过
	cin.getline(str,MAX);          
	char ans[MAX][MAX];
	int len = strlen(str),r = 0,c = 0;  //r是行,c是列 
	for(int i = 0;i < len; i++){
		if(str[i] != ' '){
			ans[r][c++] = str[i];
		}else{          //是空格就给这个单词加个结束符 
			ans[r][c] = '\0';
			r++;
			c = 0;
		} 
	}
	ans[r][c] = '\0';   //最后一个单词没有空格,需要手动补一个结束符 
	for (int i = r; i >= 0; i--) {  //按行逆序输出单词 
		printf("%s", ans[i]);
		if (i > 0) printf(" ");     //最后一个单词不需要空格 
	}
	return 0;
}

既然本质上就是对二维数组存储再读出,那为什么不直接读入到二维数组呢,于是有了下面第二种更简洁的代码:

#include<cstdio>
#include<cstring>
//#include<iostream>
//#include<algorithm>
//#include<vector>
//using namespace std;
const int MAX = 90;

int main()
{
	char ans[MAX][MAX];
	int num = 0;
	//需要手动Ctrl+Z来结束输入,oj测试时输入完会默认输入Ctrl+Z的 
	while(scanf("%s",ans[num]) != EOF){ //不要直接写成while(scanf("%s",ans[num++]) != EOF); 
		num++;                          //结果开头会多打印个空格,把Ctrl+Z作为空格输入到ans[num-1] 
	}                                   //注意把握num自增和判断是否在文件末尾的顺序 
	for (int i = num - 1; i >= 0; i--) {   
		printf("%s", ans[i]);
		if (i > 0) printf(" ");     //最后一个单词不需要空格 
	}
	return 0;
}

教训与收获:
1.我最初的想法是对已读取的字符串进行从后往前分割,结果没完全实现出来,很麻烦,没想到用二维数组来存储这么轻易就解决了,还是题目刷的太少,下次知道了,想要把一个字符串当成一个数据元素的要使用二维数组
2.知道了gets的使用场景,毕竟是c的函数要和头文件配套,而c++有自己封装的读取一行的函数cin.getline()
3.知道了单词是以空格来判断的
4.知道了读到文件末尾时是会把一个空格给读入的(如果有空间可以存放的话)

标签:空格,pat,int,MAX,单词,1009,ans,20,include
来源: https://blog.csdn.net/zhoujie1233456/article/details/122417506

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有