1727 - 小胖的erlang

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

小胖最近一直在学习erlang,里面有很多东西和c语言不一样,虽然是用c开发出来的,例如:erlang里面没有变量,没有循环,只有分支结构。不过erlang也有他自己独特的优点.
在 erlang中,有5种数据类型

数值:

integer  整数型
float  浮点型

元子:

atoms  以小写字母开头的字符串,只是1个名字,没有任何意义,例:charles,inch


元组:

tuples:用"{"和"}"把数值 和 元子放在一起 例如:{m,1},{cm,100},{mm,1000}

列表:

list:用"["和"]"可以包括任意变量,包括列表 例如:[aa],[12,1.2],[1,{m,1}],[1,[1,{m,1}]]


如果是一个字符串,那么她其实是一个list,而且是用ASCII表示的,例如,"abc" = [97,98,99]。

题目输入

输入erlang 数据,输出对应的类型

题目输出

输出对应类型,如果有tuples 或者 list,那么要用"(",")"把他里面的内容括起来,具体输出格式参照样例输出

输入/输出样例

输入格式

1
1.2
asd
{m,1}
"abc"
[aa]
[1,[1,{m,1}]]
""
{}

输出格式

integer
float
atoms
tuples(atoms,integer)
list(integer,integer,integer)
list(atoms)
list(integer,list(integer,tuples(atoms,integer)))
list()
tuples()

C++解答

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[105];
bool k;//判断是不是""
int tuples_run(int a);
int list_run(int a);
int run(int a);
int char_run(int a);

int tuples_run(int a)
{
	int t;
	printf("tuples(");
	t=run(a);
	printf(")");
	return t;
}

int list_run(int a)
{
	int t;
	printf("list(");
	t=run(a);
	printf(")");
	return t;
}

int char_run(int a)
{
	int t;
	printf("list(");
	t=run(a);
	printf(")");
	return t;
}

int run(int a)
{
	int len = strlen(s);
	int sum;
	int i;
	sum=0;
	for(i=a;i<len;)
	{
		if(s[i]=='[')
			i=list_run(i+1);
		else if(s[i]=='{')
			i=tuples_run(i+1);
		else if(s[i] ==']' || s[i] == '}')
		{
			return i+1;
		}
		else if(s[i]=='"'&& k==false)
		{
			k=true;
			i = char_run(i+1);
		}
		else if(s[i]==',')
		{
			i++;
			printf(",");
		}
		else if(k==false)
		{
			if(s[i]>='0' &&s[i] <= '9')
			{
				while(s[i]!=',' && s[i] != '.' && s[i] != ']' && s[i]!='}' &&i < len) i++;
				if(s[i]=='.')
				{
					while(s[i]!=','  && s[i] != ']' && s[i]!='}'  &&i < len)i++;
					printf("float");
					if(s[i]==',')
					{
						i++;
						printf(",");
					}
				}
				else
				{
					printf("integer");
					if(s[i]==',')
					{
						i++;
						printf(",");
					}
				}
			}
			else
			{
				printf("atoms");
				while(s[i]!=','&& s[i]!=']' && s[i]!='}' && i<len) i++;
				if(s[i]==',')
				{
					i++;
					printf(",");
				}
			}
		}
		else
		{
			if(s[i]!='"')
			{
				i++;
				printf("integer");
			}
			while(s[i]!='"')
			{
				i++;
				printf(",integer");
			}
			k=false;
			return i+1;
		}
	}
}

int main()
{
	while(gets(s))
	{
		run(0);
		printf("\n");
	}
	return 0;
}