16-2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

struct node{
	char s[100];
	int no;//表示值
	int mark;//表示是否根据前一个的字符值加一
}ENUM[500];

int main()
{
	char str[1000],st[1000];//st存放str中{}的内容
	int i,l1,l2;//l1表示enum的开始,l2表示enum的结束
	for(i=0;i<500;i++)
		ENUM[i].mark=0;

	
	gets(str);
	int len=strlen(str);//输入字符串的长度
//	printf("%s %d\n",str,len);

	int k;//i的替代品
	for(i=0;i<len;i++)
	{
		k=i;
		if(str[i]=='{')
			l1=++k;
		else if(str[i]=='}')
			l2=--k;
	}
//	printf("%d %d\n",l1,l2);

	int j=0; //复制{}内的字符串到st
	for(i=l1;i<=l2;i++)
		st[j++]=str[i];
	st[j++]=',';//因为每次在遇见,时给逗号前的字符串进行赋值,为了给最后一个字符串赋值,人工在st最后耶加一个逗号
	st[j]='\0';//不加显示烫 你懂得。。。
	int len1=strlen(st);//st的长度
//	printf("%s %d\n",st,len1);

	int flag=0,q=0,u=0,index=0;//flag用于表示第几个结构体的下标,q表示某个结构体里面字符串内容的下标
	//u用于表示字符串转int的临时字符串数组的下标,index表示从0开始的赋值
	char temp[100];//用于保留有=的字符的值
	for(i=0;i<len1;i++)
	{
		if(st[i]==',')
		{
			if(ENUM[flag].mark==0)//mark=0表示逗号前的字符串中没有=,就从默认赋值开始
				ENUM[flag].no=index++;
			else
				ENUM[flag].no=index++;

//			printf("s=%s flag=%d no=%d\n",ENUM[flag].s,flag,ENUM[flag].no);
			printf("%s %d\n",ENUM[flag].s,ENUM[flag].no);
			flag++;//下一个字符
			q=0;//归0要复制的字符串下标
		}
		else if(st[i]=='=')
		{
			i++;
			while(st[i]!=',')
			{
				temp[u++]=st[i++];
			}
			index=atoi(temp);//atoi字符串转int函数,将=后面的值转为int保存在index中
			ENUM[flag].mark=1;//将这个字符串标记,下个字符串根据这个字符串的值++
			
			u=0;//归0临时字符串数组的下标
			i--;//将数组下标i返回到,处
		}
		else 
		{
			ENUM[flag].s[q++]=st[i];//复制字符内容
		}
	}

//	printf("%d\n",flag);

/*	for(i=0;i<flag;i++)//输出
		printf("%s %d\n",ENUM[flag].s,ENUM[flag].no);*/

	return 0;
}
//2018/3/13
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<ctype.h>


#define WORD 30




struct node
{
	char str[WORD]; //单词	
	char val[1000]; //值
	int flag;	//flag表示前面是否给过值,0没有,1给过
}ENUM[100];


int main()
{
	char str[1000];
	gets(str);
	int len=strlen(str);
	int i=0,j=0,k=0,l=0;
	while(str[i]!='{')
		i++;
	int flag=i+1;//字符串开始的位置
	for(i=0;i<100;i++)
	{
		ENUM[i].flag=0;
	}
	int n=0;
	for(i=flag;i<len;i++)
	{
		if(str[i]==','||str[i]=='}')
		{
			ENUM[j].str[k]='\0';
			if(ENUM[j].flag==0) //若没有给过值
			{
				char  m[1000];
				itoa(n,m,10); //先把int变为char,就是n保留在m中
//				printf(" n=%d ",n);
				strcpy(ENUM[j].val,m);//把m放入val中
				n=atoi(m);//再把char变为int m的值放入n
				n++;//n加一 以便下次赋值
			}
			else if(ENUM[j].flag==1)//若给过值
			{
				n=atoi(ENUM[j].val)+1;//直接n加一
			}
			j++;
			k=0;
		}
		else if(str[i]=='=')
		{
			i++;
//			while(str[i]==' ') //跳过多余空格
//				i++;
			while(str[i]!=','&&str[i]!='}')//必须是&&
			{
				ENUM[j].val[l++]=str[i];
				i++;
			}
			l=0;      //归零
			ENUM[j].flag=1;
			i--;
		}
		else//复制单词
		{
			ENUM[j].str[k++]=str[i];
		}
	}
	for(i=0;i<j;i++)//输出
	{
		printf("%s %s\n",ENUM[i].str,ENUM[i].val);
	}
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值