题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

bool comp (const string a, const string b) {
    int m = a.size();
    int n = b.size();
    int minlen = min(m,n);
    for (int i = 0; i < minlen; i++) {
        if (a[i] == b[i])
            continue;
        return a[i] < b[i];
    }
    if (m < n)
        return true;
    else 
        return false;
}

int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        vector<string> vs(n);

        for (int i = 0; i < n; i++)  
            cin >> vs[i];

        sort(vs.begin(), vs.end(), comp);

        for (auto tmp : vs) 
            cout << tmp << endl;

    }
}

本来用的geline(cin, vs[i])来输入字符串,但最后一行的字符串实际上没有被vs存下来

换成cin>>vs[i]后正常了

百度了一下cin和getline的区别:

cin:会忽略空白字符,空白符号和'\n'会停止cin的输入

getline:不会忽略空白字符,直到遇到'\n'或EOF停止输入

getline之所以出错,因为输入的最后一行末尾不是'\n',也不是EOF

所以在考试遇到字符串输入,需要留意字符串中是否有空格,有空格则用getline,否则用cin就可以了

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务