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