zoukankan      html  css  js  c++  java
  • CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113

    解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为一个关键字对应一个值,输入格式如下:

    {a:3,b:4,c:10,f:6}
    {a:3,c:5,d:10,ee:4}
    冒号前面的表示关键字,冒号后面的数字表示值,关键字由小写字母组成。
    现在让你判断,如果新的字典相对于原来的字典有新增的关键字以以下格式输出 :+key1,key2,....
    如果新的字典相对于原来的字典少了关键字以以下格式输出:-key1,key2....
    如果新的字典的关键字对于原来的字典的相同的关键字对应的值有变化以以下格式输出:*key1,key2...

    主要有两个过程,首先把输入拆分成一个一个元素的形式存入map容器,然后就是比较的过程,这个简单了。要注意的是同一个关键字可能输入多次,所以要注意去重。然后还有据说这个题目的输入有问题,输入的时候有两个换行符,不过你只要都用scanf输入就行了,不用管。
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<cmath>
     6 #include<deque>
     7 #include<queue>
     8 #include<cstdlib>
     9 #include<string>
    10 #include<map>
    11 using namespace std;
    12 const int maxn = 205;
    13 map<string,string> old,New;
    14 
    15 char str[2][maxn];
    16 int changeto(map<string,string>& mp,char* str)
    17 {
    18     string a = "",b = "";
    19     int len = strlen(str),f = 0;
    20     for(int i = 0;i < len;++i)
    21     {
    22         if(str[i] == '{' || str[i] == ',' || str[i] == '}')
    23         {
    24             mp.insert(pair<string,string> (a,b));
    25             a = "";
    26             b = "";
    27             continue;
    28         }
    29         if(str[i]  >= 'a' && str[i] <= 'z')
    30         a += str[i];
    31         else if(str[i] >= '0' && str[i] <= '9')
    32         b += str[i];
    33     }
    34     return f;
    35 }
    36 int main()
    37 {
    38     int T,flag = 0;
    39     scanf("%d",&T);
    40     while(T--)
    41     {
    42         scanf("%s%s",str[0],str[1]);
    43         int num1 = changeto(old,str[0]);
    44         int num2 = changeto(New,str[1]);
    45         int j,ff = 0,fff = 0;
    46         for(map<string,string>::iterator iter = New.begin();iter != New.end();++iter)
    47         {
    48             if(old.insert(*iter).second == 1)
    49             {
    50                 printf(ff? ",%s":"+%s",iter->first.c_str());
    51                 old.erase(iter->first);    // 插入成功的话一定要记得删除,不然会影响后面的查找 
    52                 ff = 1;
    53             }
    54         }
    55         if(ff) puts("");
    56         fff = max(ff,fff);
    57         ff = 0;
    58         for(map<string,string>::iterator iter = old.begin();iter != old.end();++iter)
    59         {
    60             if(New.insert(*iter).second == 1)
    61             {
    62                 printf(ff? ",%s":"-%s",iter->first.c_str());
    63                 New.erase(iter->first);
    64                 ff = 1;
    65             }
    66         }
    67         if(ff) puts("");
    68         fff = max(ff,fff);
    69         ff = 0;
    70         for(map<string,string>::iterator iter = New.begin();iter != New.end();++iter)
    71         {
    72             if(old.insert(*iter).second == 0 && old[iter->first] != New[iter->first])
    73             {
    74                 printf(ff? ",%s":"*%s",iter->first.c_str());
    75                 ff = 1;
    76             }
    77         }
    78         if(ff) puts("");
    79         fff = max(ff,fff);
    80         if(fff == 0) puts("No changes");
    81         puts("");
    82         old.clear();
    83         New.clear();
    84     }
    85     return 0;
    86 }
    View Code
  • 相关阅读:
    正则只能输入数字小数点后保留4位
    redis基础之安装和配置
    IDEA 2017下载及注册码
    springcloud zuul 使用zuulfilter 修改请求路径和响应头
    JPA 多表分页查询
    springboot整合JPA创建数据库表失败
    springboot整合fastjson 将null转成空字符串
    Go 结构体和map等数据结构转json字符串
    go项目找不到包问题
    设计模式--策略模式
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/4009305.html
Copyright © 2011-2022 走看看