长嘘一口气。。。

简介:

#include "stdio.h"
#include "string.h"

const int Len=102;

typedef struct
{
	char name[Len];
	char value[Len];
	int flag;
}Keys;


Keys oldstr[Len],newstr[Len];


int deal(Keys *str)
{
	int count=0;
	char ch;
	int i=0;													//i 字母计数指针
	
	while(ch!='}')
	{
		scanf("%c",&ch);
		if(ch<='z' && ch>='a')
			str[count].name[i++]=ch;

		else if(ch==':')
			i=0;

		else if(ch<='9' && ch>='0')
			str[count].value[i++]=ch;

		else if(ch==',')
		{
			i=0;
			count++;
		}
	}
	
	return count+1;
}



void testprint(Keys *str,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%s.",str[i].name);
		printf("%s ",str[i].value);
	}

	printf("\n");
}


int main()
{
	int t;
	scanf("%d",&t);
	
	int i,j;
	int counto,countn;
	int sum;
	while(t--)
	{
		//init
		for(i=0;i<Len;i++)
		{
			for(j=0;j<Len;j++)
			{
				oldstr[i].name[j]='\0';
				oldstr[i].value[j]='\0';
				newstr[i].name[j]='\0';
				newstr[i].value[j]='\0';
				oldstr[i].flag=0;							//flag初始化为0,value不变置1,改变置2
				newstr[i].flag=0;
			}
		}
		
		counto=deal(oldstr);
		//testprint(oldstr,counto);

		countn=deal(newstr);
		//testprint(newstr,countn);

		for(i=0;i<counto;i++)
		{
			for(j=0;j<countn;j++)
			{
				if(strcmp(oldstr[i].name,newstr[j].name)==0)
				{
					if(strcmp(oldstr[i].value,newstr[j].value)==0)
					{
						oldstr[i].flag=1;
						newstr[j].flag=1;
					}

					else
					{
						oldstr[i].flag=2;
						newstr[j].flag=2;
					}
				}
			}
		}

		//搜索old串
		for(i=0;i<counto;i++)
			if(oldstr[i].flag!=1)
				break;

		for(j=0;j<countn;j++)
			if(newstr[j].flag!=1)
				break;

		if(i==counto && j==countn)
			printf("No changes\n");

		else
			//printf("have\n");
		{
			sum=0;
			for(i=0;i<countn;i++)
			{
				if(newstr[i].flag==0)
				{
					sum++;
					if(sum==1)
						printf("+");
					printf("%s ",newstr[i].name);
				}

				if(sum!=0 && i==countn-1)
					printf("\n");
			}

			sum=0;
			for(i=0;i<counto;i++)
			{
				if(oldstr[i].flag==0)
				{
					sum++;
					if(sum==1)
						printf("-");
					printf("%s ",oldstr[i].name);
				}

				if(sum!=0 && i==countn-1)
					printf("\n");
			}

			sum=0;
			for(i=0;i<counto;i++)
			{
				if(oldstr[i].flag==2)
				{
					sum++;
					if(sum==1)
						printf("*");
					printf("%s ",oldstr[i].name);
				}

				if(sum!=0 && i==countn-1)
					printf("\n");
			}
		}

		printf("\n");
	}
	
	return 0;
}

现场赛的C题终于写出来了。。。终于感觉好点了,虽然打码不一定精简,不过也算解了心结了,就因为这题没得奖啊。。。花了1个多小时。。。



相关文章
|
3月前
|
C++ Windows
Windows下编译64位CGAL
Windows下编译64位CGAL
117 0
|
6月前
解决Vue3.0项目多次运行后,项目体积增大问题(高达60G)
解决Vue3.0项目多次运行后,项目体积增大问题(高达60G)
175 0
|
3月前
|
算法
探索编程之道:从代码到哲学
【8月更文挑战第16天】在数字时代的浪潮中,编程不仅仅是一种技术技能,它更是一种思考方式、解决问题的艺术。本文将通过个人的技术感悟,探讨编程如何超越代码本身,成为一种深刻影响我们生活和工作的哲学。从初识编程的困惑与挑战,到深入理解后的洞察与启示,我们将一同走进编程的内在世界,发现那些隐藏在逻辑与算法背后的智慧与美。
|
6月前
|
数据采集 数据可视化 搜索推荐
提升编码技能:学习如何使用 C# 和 Fizzler 获取特价机票
使用C#和Fizzler库,开发一个多线程爬虫,高效抓取五一假期特价机票信息。通过代理IP规避反爬策略,实现实时数据更新、个性化推送及数据可视化分析。示例代码展示如何配置代理、发送HTTP请求、解析HTML并提取机票详情。注意适应实际环境调整参数。祝编码愉快!
提升编码技能:学习如何使用 C# 和 Fizzler 获取特价机票
给你一组数,求出其中两两最大公约数中最大的值
给你一组数,求出其中两两最大公约数中最大的值
65 0
|
前端开发 JavaScript 开发者
loader - 配置处理 css 样式表的第三方 loader| 学习笔记
快速学习 loader - 配置处理 css 样式表的第三方 loader
|
网络协议 网络架构