#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;
}