Updating a Dictionary UVA - 12504

该博客详细介绍了如何解决UVA12504 - Updating a Dictionary问题。作者使用C++,通过字符串流处理输入,并利用map数据结构进行操作。代码中涉及字符串处理、字典操作、排序和输出。博客强调了字符串流在处理无空白字符输入时的作用,以及在理解无注释代码中的思维锻炼价值。
摘要由CSDN通过智能技术生成

题目链接:Updating a Dictionary - UVA 12504 - Virtual Judge (vjudge.net)

这个题首先想到的就是用map,但是数据过大要注意不要用long long,用字符串储存数字比较好,

这个题不经意间想到字符串流可以分隔字符串的功能,但是题目中提到一句说是不含空白字符(这会不会是一种暗示呢?嘿嘿嘿),于是我就用了字符串流,把特定的字符都变成了空格字符,接着就是模拟了,由于要分别存储不同的键值而且还要按顺序输出,所以我就用了不同的数组分别存储,其实看没有注释的代码更能锻炼自己的读代码能力(其实是我自己懒得写,哈哈),这是我自己的感想,那么下面就看代码吧:

AC代码:

//头文件就不写了,问就是因为懒,,,

int n;
int main()
{
    cin>>n;
    while(n--)
    {
        map<string,string> case1;
        map<string,string> case2;
        vector<string> Add;
        vector<string> Delete;
        vector<string> Remove;
        int kase=2;
        while(kase--)
        {
            string s;
            cin>>s;
            for(int i=0;i<s.length();i++)
            {
                if(s[i]=='{'||s[i]=='}'||s[i]==',')
                    s[i]=' ';
            }
            stringstream line(s);
            string s1;
            while(line>>s1)
            {
                string key=s1.substr(0,s1.find(':'));
                string value=s1.substr(s1.find(':')+1);
                if(kase==1)
                    case1[key]=value;
                if(!kase)
                    case2[key]=value;
            }
        }
        for(auto p:case2)
        {
            if(case1.find(p.first)==case1.end())
                Add.push_back(p.first);
            else if(case1.find(p.first)!=case1.end()&&case1[p.first]!=p.second)
                Remove.push_back(p.first);
        }
        for(auto q:case1)
        {
            if(case2.find(q.first)==case2.end())
                Delete.push_back(q.first);
        }
        sort(Add.begin(),Add.end());
        sort(Remove.begin(),Remove.end());
        sort(Delete.begin(),Delete.end());

        if(!Add.empty())
        {
            cout<<"+";
            for(int i=0;i<Add.size();i++)
            {
                if(i==0)
                    cout<<Add[i];
                else
                    cout<<","<<Add[i];
            }
            cout<<endl;
        }
        if(!Delete.empty())
        {
            cout<<"-";
            for(int i=0;i<Delete.size();i++)
            {
                if(i==0)
                    cout<<Delete[i];
                else
                    cout<<","<<Delete[i];
            }
            cout<<endl;
        }
        if(!Remove.empty())
        {
            cout<<"*";
            for(int i=0;i<Remove.size();i++)
            {
                if(i==0)
                    cout<<Remove[i];
                else
                    cout<<","<<Remove[i];
            }
            cout<<endl;
        }
        if(Add.empty()&&Remove.empty()&&Delete.empty())
            cout<<"No changes"<<endl;

        cout<<endl;

    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值