题目描述
给定n个字符串,请对n个字符串按照字典序排列。
原来思路是想用sort函数,然后重写下里面的比较函数
#include <iostream> #include <vector> #include <algorithm> using namespace std; static bool cmp(string a,string b){//注意加static int min=(a.size()<b.size()?a.size():b.size()); for(int i=0;i<min;i++){ if(a[i]<b[i]) return true;//字母小的排前面 if(a[i]>b[i]) return false; } return min==a.size()?true:false;//前述字母相同时,短的排前面 } int main(){ int num;cin>>num; string s; vector<string> ans; for(int i=0;i<num;i++){ cin>>s;//读取每行输入的字符串 ans.push_back(s);//放到vector中 } sort(ans.begin(),ans.end(),cmp);//重写cmp for(auto i:ans) cout<<i<<endl; return 0; }
然而... 在解题里看到有人:
static bool cmp(string a,string b){ return a<b;//字符串自带的比较功能,就是字典序 }
再然后,发现sort本来默认就是从小到大的,所以根本不需要重写cmp
sort(ans.begin(),ans.end());//直接调用,AC
嗯..记住了
(自从对面的同学说笔试用sort很正常后,我的排序题就放飞了)
看到另一种,完全版的字典序是大小写都有规则的,因为sort是按ascii码,会先排大写A-Z再排小写a-z,所以需要判断。思路:查表?把每个字母对应一个数字,表示大小,比如A-1,a-2,B-3,b-4....(大写在前面) 然后重写cmp函数...