【牛客】牛客练习赛15(erase())

Posted on 2018-04-14 16:28  som_nico  阅读(152)  评论(0编辑  收藏  举报

牛客练习赛15

 

吉姆的运算式

题意:输入进去的最后一组数。

思路:水。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int i,f1,f2;
    string a;
    cin>>a;
    f1=0;f2=0;
    for(i=0;i<a.length();i++)
    {
        if(a[i]==',')
            f1=i;
        if(a[i]=='(')
            f2=i;
    }
    i=max(f1,f2);
    for(;i<a.length();i++)
    {
        if(a[i]==','||a[i]=='(')
            continue;
        if(a[i]==')')
            break;
        else
            cout<<a[i];
    }
    cout<<endl;
    return 0;
}

 

B-沃老师学生的成绩

https://www.nowcoder.com/acm/contest/83/B

题意:比较字符串大小,相同的话按名字字典序输出

思路:用erase删除数组元素。

临时变量作为引用参数传递时,必须是常量引用。所以在cmp函数里加入const 再加参数。

临时变量不能作为非const引用参数,不是因为他是常量,而是因为c++编译器的一个关于语义的限制。如果一个参数是以非const引用传入,c++编译器就有理由认为程序员会在函数中修改这个值,并且这个被修改的引用在函数返回后要发挥作用。但如果你把一个临时变量当作非const引用参数传进来,由于临时变量的特殊性,程序员并不能操作临时变量,而且临时变量随时可能被释放掉,所以,一般说来,修改一个临时变量是毫无意义的,据此,c++编译器加入了临时变量不能作为非const引用的这个语义限制,意在限制这个非常规用法的潜在错误。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int SIZE = 1e6 + 10;
struct grade
{
    string name;
    string score, sscore;
} a[SIZE];

bool cmp(const grade &x,const grade &y)
{
    if(x.sscore != y.sscore) return x.sscore > y.sscore;
    return x.name < y.name;
}
int main()
{
    int n;
    while(cin >> n)
    {
        for(int i = 0; i < n; i++)
        {
            cin >> a[i].name >> a[i].score;
            a[i].sscore = a[i].score;
            int j = a[i].sscore.length() - 1;
            while(a[i].sscore[j] == '0')
            {
                a[i].sscore.erase(j);
                j--;
            }
        }
        sort(a, a + n, cmp);

        for(int i = 0; i < n; i++)
        {
            cout << a[i].name << " " << a[i].score << endl;
        }
    }
    return 0;
}