字符串处理--HDU第1073解题报告

题目链接

该题最关键的是如何接收数据,想不明白之前,感觉这题真TM难,可想明白之后,。。。

好了。下面是思路:

用string类接收START之后,END之前的字符串,并存入容器中。

然后用==比较容器,如果相等,即数据一模一样,则AC

否则,将容器中的字符连起来,形成一个长字符,然后去除格式之后再比较string的大小

如果相等,则PE,否则WA。


千辛万苦终AC


#include<iostream>
#include<string>
#include<vector>
using namespace std;
//问题是怎么接收数据
void delete_space(string &str)//删除字符串的空格或者TAB
{
    string::iterator iter = str.begin();
    string::size_type index;
    index = str.find(' ');
    while(index != string::npos)
    {
        str.erase(iter+index);
        index = str.find(' ');
    }
    index = str.find(9) ;//不知道为什么不能用‘   ’,所以用TAB的ascii码
    while(index != string::npos)
    {
        iter = str.begin();
        str.erase(iter+index);
        index = str.find(9);
    }
}
int main()
{
    string str1;


    //问题是怎么接收到字符串
    int n;
    cin>>n;
    cin.get();
    int i;

    while(n--)
    {
        vector<string> vec1;
        vector<string> vec2;
        string str2;
        string str3;
        getline(cin,str1);//接收start

        getline(cin,str1);//接收数据
        while(str1!="END")//将数据全部存进容器中
        {

            vec1.push_back(str1);
            getline(cin,str1);

        }

        getline(cin,str1);//同上

        getline(cin,str1);
        while(str1!="END")
        {
            vec2.push_back(str1);
            getline(cin,str1);
        }
        if(vec1==vec2)//如果两个容器相等则AC
            cout<<"Accepted"<<endl;
        else
        {
            for(i=0;i!=vec1.size();++i)
            {
                str2+=vec1[i];
            }
            for(i=0;i!=vec2.size();++i)
            {
                str3+=vec2[i];
            }
            delete_space(str2);//去除格式
            delete_space(str3);
            if(str2 == str3)//去除格式后,如果相等,则PE
                cout<<"Presentation Error"<<endl;
            else//否则wa
                cout<<"Wrong Answer"<<endl;
        }
    }
}


/*
START
goodtime
END
START
good
time
END


说一下这组数据

本来我的程序是没有将字符串连成一个大字符串,而是去除空串和把每个元素去除格式。

然后比较两个容器的大小,如果相等,则PE

但是我发现了这组测试数据,

才让我从万恶的WA中走出来
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值