这题有个坑的地方是,每组数据第一行的数字后面有个小空格,不能直接定义n,然后cin>>n,这样后面执行getline(cin,s);就会把一个小空格输入到s中。
所以输入n的时候也要getline(cin,input),然后定义stringstream ss(input)对象,ss>>n; 这样空格就没有了,不影响后面输入
#include <iostream> #include <vector> #include <string> #include <sstream> #include <algorithm> using namespace std; bool myCompare(const string &a,const string &b){ return a.size()<b.size(); } int main() { string input; string s; int n; vector<string> strs; while (getline(cin,input)) { // 注意 while 处理多个 case stringstream ss(input); ss>>n; strs.clear(); for(int i=0;i<n;i++){ getline(cin,s); if(s=="stop") break; else strs.push_back(s); // cout<<s<<" "; // cout<<strs.size()<<" "; // cout<<strs[i]<<" "<<endl; } sort(strs.begin(),strs.end(),myCompare); // cout<<strs.size()<<endl; for(int i=0;i<strs.size();i++){ cout<<strs[i]<<endl; } } } // 64 位输出请用 printf("%lld")