DreamJudge-1261-字符串排序3

1.题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串少于一百个字符。 如果在输入过程中输入的一个字符串为“stop”,也结束输入。 然后将这输入的该组字符串按每个字符串的长度,由小到大排序,按排序结果输出字符串。

输入输出格式

输入描述:

字符串的个数,以及该组字符串。每个字符串以‘\n’结束。如果输入字符串为“stop”,也结束输入.

输出描述:

可能有多组测试数据,对于每组数据,
将输入的所有字符串按长度由小到大排序输出(如果有“stop”,不输出“stop”)。

根据输入的字符串个数来动态分配存储空间(采用new()函数)。每个字符串会少于100个字符。
测试数据有多组,注意使用while()循环输入。

输入输出样例

输入样例#:

5
sky is grey
cold
very cold
stop
3
it is good enough to be proud of
good
it is quite good

输出样例#:

cold
very cold
sky is grey
good
it is quite good
it is good enough to be proud of

题目来源
北京大学机试题

2.题解

2.1 字符串处理函数 + 排序

思路

注意下如果使用cin作为while条件,要手动去除换行符

代码

#include<bits/stdc++.h>
using namespace std;

int main(){
	string input;
	vector<string> ans;
	int cnt;
//	while(getline(cin, input) && !input.empty()){
//		int cnt = stoi(input);
	while(cin >> cnt){
		cin.ignore(); // 忽略换行符,也可以用getchar(); 
		string str;
		vector<string> strs; 
		while(getline(cin, str) && str != "stop" && cnt-- != 0){
			strs.push_back(str);
		} 
		sort(strs.begin(), strs.end(), [](string str1, string str2){
			return str1.length() < str2.length();
		});
		for(string str : strs){
			ans.push_back(str);
		}
	} 
	for(string str : ans){
		cout << str << endl;
	}
	return 0;
}
posted @ 2024-06-15 01:44  DawnTraveler  阅读(10)  评论(0编辑  收藏  举报