string的使用

版权声明:本文为博主原创文章,未经博主允许也可以转载。 https://blog.csdn.net/Liukairui/article/details/82225201

博客诈尸更新啦。。。。
最近写题
发现string要比想象的强大的多。。。
以前一直觉得string只是字符数组包装了一个新的数据类型
然后直到遇到这道题
当然是个水题
于是直接写代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char maxn[150],tmp[150];
int main(){
    maxn[0]='\0';
    int n,maxnum;
    cin>>n;
    for(int nn=1;nn<=n;nn++){
        scanf("%s",tmp);
        int c1,c2;
        for(c1=0;maxn[c1]!='\0';c1++);
        for(c2=0;tmp[c2]!='\0';c2++);
        if(c2>c1){swap(maxn,tmp);maxnum=nn;}
        else if(c1==c2){
            for(int i=0;i<c1;i++){
                if(maxn[i]<tmp[i]){swap(maxn,tmp);maxnum=nn;break;}
                else if(maxn[i]>tmp[i])break;
            }
        }
    }
    cout<<maxnum<<endl;
    for(int i=0;maxn[i]!='\0';i++)cout<<maxn[i];
    return 0;
}

AC后无聊翻题解
有一个大佬发了如下代码

#include<iostream>
using namespace std;
int main()
{
    int n;
    int number;//奇怪的变量命名,其实这个是用来记录为当上总统的人的号数
    string max="";//赋初值,如果是全局变量的话不必要,但是 max 不可以当全局变量(会重名)
    //如果一定要这样做的话,必须要去掉 using namespce std;,每个 cin 之类的之前都要加 std::
    string in;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> in;
        int inSize = in.size();
        int maxSize = max.size();
        if (inSize > maxSize || (inSize >= maxSize && in > max))
        //逻辑运算符是短路运算符。即一旦能够确定整个表达式的值,就不再继续计算。
        //所以这样写性能比几个 if 好些
        //实际差距几乎没有
        {
            max = in;
            number = i + 1;
        }
    }
    cout << number << '\n' << max << '\n';
    return 0;
}

原理:string的比较 保存数字的字符串=高精度版比较大小

然后就发先这个字符串还有玩法
于是又看到这道题

#include<iostream>
#include<algorithm>
using namespace std;
string a[21];
bool cmp(string a,string b)
{
    return a+b>b+a;//a+b就是b接在a的后面
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++)cout<<a[i];
}

看到//a+b就是b接在a的后面
就直接懵了。。。

写一下string的用法
赋值,添加,删除,替换,查找,比较,反向排序。

1.赋值

  直接来就行:

  string ss;

  ss=”aaa”;

  或者

扫描二维码关注公众号,回复: 3901621 查看本文章

  string sa,sb;

  cin>>sa;

  sb=sa;

2.添加

  在末尾加字符或字符串直接用加号:

  string ss;

  ss+=’a’;

  ss+=”aaa”;

  在中间插入一个字符用ss.insert()函数:

  ss.insert(ss.begin()+1,’a’);//在ss[1]之前插入字符a

  在中间插入一个字符串可以用替换函数ss.replace()

  ss.replace(2,0,”aaa”);//从第二个字符开始将连续0个元素替换为aaa(就是将aaa插入到了第二个字符前面了)

3.删除

  给ss赋空值ss=”“就是把整个字符串清空了。

  用ss.erase()删除掉迭代器所指的一个或一个区间内(左闭右开)的元素。

  string::iterator it=ss.begin();

  ss.erase(it+1);

  ss.erase(it+1,it+3);

4.替换

  就是用ss.replace()函数,第一个参数表示从第几个字符开始,第二个参数表示一共替换几个,第三个参数表示换成的字符(串);

  ss=”abcdefg”;

  ss.replace(2,2,”999”);

  结果ss为ab999efg;

5.查找

  使用ss.find()函数,查得到则返回第一个下标,查不到返回4294967295

  ss.find(“abc”);

6.比较

  使用ss.compare()函数,ss大则返回1,小返回-1,相等返回0.

  ss.compare(“abc”);

  注:所谓“大”,是指字典序大(在字典中靠后)。

7.反向排序

  直接reverse(ss.begin(),ss.end());

猜你喜欢

转载自blog.csdn.net/Liukairui/article/details/82225201