2345656
//方法一
#include <iostream> #include<string> #include<vector> #include<cstdlib> #include<algorithm> using namespace std; /* *字符串比较,长度相同直接比较 *长度不同时,先比较长度相同的部分,若长度相同的部分不相同,则直接进行比较即可; *长度相同的部分相同的,再将长字符串的剩下的部分与短字符串比较; *另外,排序函数的使用需要注意到地方还有很多,qsort(str,0,str+n,cmp);很漂亮的用法。而用容器则直接用begin(),end()函数替代 *cmp比较函数的设计,注意返回值为int类型 *字符串的比较,用标准模板库里面的函数真的是相当方便,各种函数用的好了很方便,用的不好,错误一堆 */ bool cmp(string str1,string str2) { int flag; bool isBig; int len1=str1.length(),len2=str2.length(); if(len1==len2) flag=str1.compare(str2); else { if(len1<len2) { if(str2.compare(0,len1,str1)==0) { isBig=cmp(str1,str2.substr(len1,len2-len1)); if(isBig) return true; else return false; } else flag= str1.compare(str2); } else { if(str1.compare(0,len2,str2)==0) { isBig=cmp(str1.substr(len2,len1-len2),str2); if(isBig) return true; else return false; } else flag= str1.compare(str2); } } if(flag==1) return false; else return true; } /* *总体思路:为了便于比较输入的数中的各位数字的大小,首先将输入的数字当成字符串输入; *输入结束后,将字符串按题目要求的规则进行排序,详细排序规则详见比较函数; *最后,将排序好的字符串直接输出就是所要求的数字,然后输出; *bingo! */ int main() { int n; while(cin>>n) { string str; vector<string>vec; for(int i=0;i<n;i++) { cin>>str; vec.push_back(str); } sort(vec.begin(),vec.end(),cmp); vector<string>::iterator iter=vec.begin(); for(;iter!=vec.end();iter++) { cout<<*iter; } cout<<endl; } return 0; } /************************************************************** Problem: 1504 User: hndxztf Language: C++ Result: Accepted Time:170 ms Memory:1528 kb ****************************************************************/
#include <iostream> #include<string> #include<vector> #include<algorithm> using namespace std; /* *首先将字符串进行拼接,再直接比较字符串 *拼接后避免出现321>32>3的情况,那样就成了332321了 */ bool cmp(string str1,string str2) { string temp1=str1,temp2=str2; temp1.append(str2); temp2.append(str1); return temp1<temp2; } /* *总体思路:为了便于比较输入的数中的各位数字的大小,首先将输入的数字当成字符串输入; *输入结束后,将字符串按题目要求的规则进行排序,详细排序规则详见比较函数; *最后,将排序好的字符串直接输出就是所要求的数字,然后输出; *bingo! */ int main() { int n; while(cin>>n) { string str; vector<string>vec; for(int i=0;i<n;i++) { cin>>str; vec.push_back(str); } sort(vec.begin(),vec.end(),cmp); vector<string>::iterator iter=vec.begin(); for(;iter!=vec.end();iter++) { cout<<*iter; } cout<<endl; } return 0; } /************************************************************** Problem: 1504 User: hndxztf Language: C++ Result: Accepted Time:250 ms Memory:1528 kb ****************************************************************/
原文地址:http://blog.csdn.net/mnmlist/article/details/40076881