PTA basic level 1009

2021-10-24

题目

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

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

思路

本来想通过string获取字符串后,通过函数按照每个空格之间分割,但是操作有点麻烦。去了解了一点输入流的操作,用着还挺好使,iss作为输入流在while循环内持续输入至str,每隔空格就会停止输入,这样就可以完美分割且易于存储和后面的倒叙输出。

代码

#include<iostream>
#include<string>
#include<sstream>

using namespace std;

int main()
{
	//定义并输入字符串
	string s;
	getline(cin, s);
	istringstream iss(s);
	/*
	分割字符串
	i、words用来储存分解下来的字符串
	str用于获取每一次iss串流出入的字符串,即被空格分割时暂停获取的字符串
	*/
	int i = 0;
	string str;
	string words[80];
	while (iss >> str)
	{
		words[i] = str;
		++i;
	}
	//倒叙输出字符串
	while (i)
	{
		--i;
		cout << words[i];
		if (i != 0)
		{
			cout << " ";
		}
	}

	return 0;
}

记录

1.cin>>s遇到空格会自动结束读取,可以使用getline(cin,s)。使用三个参数getline(cin,s,ch)则代表读取到定义的ch字符时停止。
2.istringstream执行C++风格串流输入,添加<sstream>,就可以使用如本例进行串流输入。同时它的输入并不是读取之后,本身数据就转移了,只是顺序输入。同时一个istringtream的读取是单向单次不会回头,例

	iss >> str;
	cout << str << endl;
	iss >> str1;
	cout << str1 << endl;
	iss >> str2;
	cout << str2 << endl;

循环并不会影响,且不同输入对象也不会影响其从头再来。其本身内容输入完毕之后后续就不会再输入,如iss只有LOVE YOU时,则str2不会被输入任何内容,结果只有
LOVE
YOU

3.数组下标i还需要多加注意,经常出错。

上一篇:kubeadm join 192.168.50.66:6443 --token 0109we.c3a3ofn0y0lmp0w9 --discovery-token-ca-cert-hash sha25


下一篇:无限极分类和上下级展示