题目描述
给定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函数...

京公网安备 11010502036488号