c++里有大部分字符的操作都在#include<cstring>这个库中,这个库的函数在考试的时候都是可以用的,这个库里包含了很多字符串操作函数,特别是string这个数据类型特别优美,它的基本操作和char都差不多,但是它支持比较大小,而且可以拼接字符,就比如 string a[10],这时我们定义了一个字符串数组,我们将a[1]里储存‘abcd’将a[2]里储存‘efg’ 我们接下来写出 a[1]+a[2]可以得到字符串‘abcdefg’,如果我们a[2]+a[1]的话我们可以得到‘efgabcd’ ,并且,我们比较a[2]+a[1]和a[1]+a[2]是直接比较字典序的,可以直接得到a[2]+a[1]>a[1]+a[2],这是因为在string中重载了‘<’‘>’这两个运算符,在运算string类型的时候直接比较字典序。
下面有一道非常水的练习题:
设有nn个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3n=3时,33个整数1313,312312,343343联接成的最大整数为:34331213
又如:n=4时,4个整数7,4,13,246联接成的最大整数为:7424613
第一行,一个正整数nn。
第二行,n个正整数。
一个正整数,表示最大的整数
3 13 312 343
34331213
我们看到这一题就可以很轻易的想到排序,只是将普通的排序中的比较变成了字符串比较,比如样例中 13 312 343 ,我们拿着先从a[1]:13开始将13312和31213比较,明显31213比13312大,交换位置,a[1]位置已经变成了312,我们接着拿a[1]与下面比较,312343和343312比较,明显343312比312343大,交换位置,这时的a[1]变成了343312,这一轮比较完成,我们接下来拿a[2]:13来和它后面的数据继续比较,我们看13312和31213比较,明显31213比较大,交换位置,至此整个比较过程已经结束,我们将这三个元素顺序输出,得到34331213.
Code:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main(){ string a[31]; int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<n;i++){ for(int j=i+1;j<=n;j++){ if(a[i]+a[j]<a[j]+a[i]) swap(a[j],a[i]); } } for(int i=1;i<=n;i++) cout<<a[i]; }
谢谢阅读.
原文:https://www.cnblogs.com/tianbowen/p/11402433.html