DreamJudge-1261-字串排序3

DawnTraveler發表於2024-06-15

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;
}

相關文章