UVA Updating a Dictionary

#include <cstdio>
#include <string>
#include <map>
#include<sstream>
#include <cmath>
#include <iostream>
#include <cstring>
using namespace std;
char record[109];
void build(map<string,string>&x)//建立字典函数
{
	x.clear();
	scanf("%s", record);
	char *t, *p, *k;//指针记录字符串,记录表示字符串,p用来控制读取字符串的结束
	t = record + 1;//字符串名表示字符串首地址
	string key, value;//key与value值注意相互对应
	while (k=strchr(t,':'))
	{
		if ((p = strchr(t, ',')) == 0)//检验字符串是否结束
			p = &t[strlen(t)-1];//最后一个元素的地址,控制字符串读取的结束
		key = string(t, k);//t代表元素首地址
		value = string(k + 1, p);//key与value值可能很大,注意读取时控制
		x[key] = value;
		t = p + 1;
	}
}
int main()
{
	int t;
	cin >> t;
	getchar();
	while (t--)
	{
		map<string, string>od, nw;//新旧字典存储
		build(od);
		build(nw);
		int num = 0,total=0;
		map<string, string>::iterator i, j;//迭代器寻找相应元素
		for (i = nw.begin(); i != nw.end(); i++)
		{
			if ((j = od.find(i->first)) == od.end())//first代表key值,注意寻找旧字典中是否存在
			{
				if (!num)//初始情况,无增添词语时
					printf("+");
				else//注意每个词语单独输出
					printf(",");
				num++;
				total++;
				cout << i->first;
			}
		}
		if (num)//存在词语输出
			printf("\n");
		num = 0;
		for (j = od.begin(); j != od.end(); j++)//旧字典中存在的词语新字典中无则说明删去
		{
			if ((i = nw.find(j->first)) == nw.end())
			{
				if (!num)
					printf("-");
				else
					printf(",");
				num++;
				total++;
				cout << j->first;
			}
		}
		if(num)
		printf("\n");
		num = 0;//第三种情况,key值存在,value值改变
		for (i = nw.begin(); i != nw.end(); i++)
		{
			if ((j = od.find(i->first)) != od.end() && j->second != i->second)//注意value值改变,注意相应的变化
			{
				if (!num)
					printf("*");
				else
					printf(",");
				num++;
				total++;
				cout << i->first;
			}
		}
		if(num)
		printf("\n");
		if (total == 0)
			printf("No changes\n");
		printf("\n");//输出格式注意仔细读题
	}
}

1、学到了strchr函数的用法,寻找字符串中某一元素的位置,细节易错点:注意读取key与value值时,注意指针位置的控制,数组名代表该字符串的首地址,string函数的用法,按照起始与终末位置提取字符串,同样注意提取字符位置的控制
2、三种操作的询问方法,迭代器的使用,按新字典查找还是按照旧字典查找注意区分清楚

3、map中key值与value值分别对应first与second
4、此题关键在于key值与value的读取问题,注意指针的使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值