题解 | #字符串排序#
字符串排序
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就可以了