题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
避坑点:
1.vector需要初始化元素个数,否则下面的for循环导致栈溢出;
2.冒泡法排序中数据交换条件是:前一个数“大于”后一个数,这里“大于”需要逐字符比较得出;
3.比较判断函数cmp()中,当"abc"、"ab"会交换吗?答:需要,这里需要将字符个数较少的放前面。
#include <iostream> #include <vector> using namespace std; bool cmp(string a, string b){ int si***(a.size(), b.size()); for(int i = 0; i < size; i++){ if(a[i] > b [i]) return true; else if(a[i] == b [i]) continue; else return false; } if(a.size() == size) return false; else return true; } void sort(int num, vector<string>& vec){ for(int i = 0; i < num; i++){ for(int j = 0; j < num - i -1; j++){ if(cmp(vec[j], vec[j+1])){ string tmp; tmp = vec[j+1]; vec[j+1] = vec[j]; vec[j] = tmp; } } } } int main(){ int num; //string str; while(cin >> num){ vector<string> vec(num); for(int i = 0; i < num; i++) cin >> vec[i]; sort(num, vec); for(string x : vec) cout << x << endl; } return 0; }