关于C++ string 的神奇用法

  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类型的时候直接比较字典序。

下面有一道非常水的练习题:

P1012 拼数

提交49.07k
通过24.21k
时间限制1.00s
内存限制125.00MB
提交代码加入收藏
题目提供者CCF_NOI
难度普及-
历史分数100
 提交记录   查看题解

推荐题目

 查看推荐
 展开

题目描述

设有nn个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。

例如:n=3n=3时,33个整数1313,312312,343343联接成的最大整数为:34331213

又如:n=4时,4个整数7,4,13,246联接成的最大整数为:7424613

输入格式

第一行,一个正整数nn。

第二行,n个正整数。

输出格式

一个正整数,表示最大的整数

输入输出样例

输入 #1复制
3
13 312 343
输出 #1复制
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值