PAT 1009

PAT 1009

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

输入格式:

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

输出格式:

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

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

代码

//在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,
//其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格
//输入样例 Hello World Here I Come
//输出样例 Come I Here World Hello
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
	string str;
	vector<char> temp;
	vector<vector<char>> ans;
	vector<string> v;
	getline(cin, str);
	int cnt = 0;
	for (auto i : str) {
		cnt++; //用来计数
		if ((i == ' ')||(cnt == str.length() + 1)) {
			ans.push_back(temp); //将一个单词存入ans中
			temp.clear();   //清空临时存储单词的vector
			continue;
		}
		temp.push_back(i);  //将单个字母存入vector
	}
	ans.push_back(temp);
	reverse(ans.begin(), ans.end());
	// 利用reverse对容器进行倒序
	for (auto i : ans) {
        for (auto j : i) 
			cout << j;
		if (i == ans.back())//如果是ans中的最后一个元素,不用再输出空格
			break;
		else
            cout << " ";
	}
	return 0;
}

思路

在学习了c++之后,我考虑用vector容器来解决问题

ans[0]ans[1]ans[2]ans[3]ans[4]ans[n]
单词1单词2单词3单词4单词5单词n

这是一个

vector<vector<char>> ans

用来存放char型vector的vector,是容器的一个嵌套

for (auto i : ans)

在这个基于范围的for循环中,i对应的就是单词i

遇到的困难

1、string类型的输入输出:直接使用cin/cout无法输入,经过查询使用了

getline(cin, str)

2、写代码时经常出现“无法重载”的错误,在使用vector类型时,有时类型不对应,无法调用功能

3、使用基于范围的for循环,需要另外添加条件来判断是否结束,在这个代码中我使用了cnt来和str.length()比较,要注意的是,在pat的gcc++的编译条件下,会有warning出现,因为cnt是有符号数,str.length()是无符号数

4、调用reverse函数时,在pat的编译环境下要加上

#include <algorithm>

5、同样在最后输出时,使用基于范围的for循环,要判断是否到最后一个元素,最后一个空格不能输出

if (i == ans.back())

使用判断条件,使用 下面这个错误

ans.end()

ans.beck()返回当前vector容器中末尾元素的引用

ans.end()返回一个当前vector容器中末尾元素的迭代器,要访问末尾元素,需要先将此迭代器减1

back()函数返回最后一个元素的地址,end()返回尾地址,尾地址不指向任何存储的元素,而是标志vector的结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值