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