UVA10194getline()的用法注意

39 篇文章 0 订阅
25 篇文章 0 订阅

这题有个很大的坑点:it must be done case insenstive.这句话的意识在这里是部分大小写,交了俩发WA,感觉自己没什么错的,

看了下别人的,发现最后面的排序部分大小写,真的坑。另外写代码的时候发现,getline(cin,string)一直崩溃,不知道为什么,

然后就把string改成了char字符数组,用gets输入,一直以为是getline()有什么问题,后来看到别人写的并不是,好像是我上面用的

memset(tem,0,sizeof(tem))对结构体中的字符串同时造成了影响,是下面的getline崩溃了,另外getline并不会吸收他前面的回车,

但是会吸收后面的回车,所以当你输入一个整数后,记得getchar()。

#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<map>
#include<set>
#include<cmath>
#include<cstring>
#include<cctype>
#include<climits>
#include<memory>
using namespace std;
#define LL long long
#define INT (1<<31)-1;
const int N=5000;
struct team
{
   //char  s[40];
   string s;
   int b,c,d,e,f,g,h,i;
}tem[40];
int t;
int find(string s)
{
   // cout<<"fail"<<endl;
    for(int i=0;i<t;i++)
        if(tem[i].s==s)
        return i;
}
int cmp(team x,team y)
{
    if(x.b!=y.b)
        return x.b>y.b;
    else if(x.d!=y.d)
        return x.d>y.d;
    else if(x.g!=y.g)
        return x.g>y.g;
    else if(x.h!=y.h)
        return x.h>y.h;
    else if(x.c!=y.c)
        return x.c<y.c;
    string ta,tb;
   for(int i=0;i<x.s.length();i++)
        ta+=toupper(x.s[i]);
   for(int i=0;i<y.s.length();i++)
        tb+=toupper(y.s[i]);
    return ta<tb;
}
int main()
{
    int n;
    cin>>n;
    getchar();
    while(n--)
    {
       // memset(tem,0,sizeof(tem));
        string s;
        getline(cin,s);
        cout<<s<<endl;
        cin>>t;
        getchar();
        for(int i=0;i<t;i++)
        {
           getline(cin,tem[i].s);
           tem[i].b=tem[i].c=tem[i].d=tem[i].e=tem[i].f=tem[i].g=tem[i].h=tem[i].i=0;
        }
     //   for(int i=0;i<t;i++)
     //       cout<<tem[i].s<<endl;
        int g;
        cin>>g;
       getchar();
        while(g--)
        {
           // char ss[100];
           string ss;
           // gets(ss);
           getline(cin,ss);
            int i=0;
            string p1,p2;
            while(ss[i]!='#')
            {
                p1=p1+ss[i];
                i++;
            }
            i++;
            int num1=0,num2=0;
            while(isdigit(ss[i]))
            {
                num1=num1*10+(ss[i]-'0');
                i++;
            }
            i++;
            while(isdigit(ss[i]))
            {
                num2=num2*10+(ss[i]-'0');
                i++;
            }
            i++;
            while(i!=ss.length())
            {
                p2=p2+ss[i];
                i++;
            }
          //  cout<<p1<<p2<<num1<<num2<<endl;
            int n1=find(p1),n2=find(p2);
            tem[n1].c++;
            tem[n2].c++;
            tem[n1].h+=num1;
            tem[n1].i+=num2;
            tem[n2].h+=num2;
            tem[n2].i+=num1;
            if(num1>num2)
            {
                tem[n1].d++;
                tem[n2].f++;
                tem[n1].b+=3;
            }
            else if(num1==num2)
            {
                tem[n1].e++;
                tem[n2].e++;
                tem[n1].b++;
                tem[n2].b++;

            }
            else
            {
                tem[n2].d++;
                tem[n1].f++;
                tem[n2].b+=3;
            }
        }
        for(int i=0;i<t;i++)
            tem[i].g+=(tem[i].h-tem[i].i);
        sort(tem,tem+t,cmp);
        for(int i=0;i<t;i++)
        {
            cout<<i+1<<") ";
            cout<<tem[i].s;
            printf(" %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",tem[i].b,
                   tem[i].c,tem[i].d,tem[i].e,tem[i].f,tem[i].g,tem[i].h,tem[i].i);
        }
        if(n)
            cout<<endl;
    }
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值