这题有个坑的地方是,每组数据第一行的数字后面有个小空格,不能直接定义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")