2013 아마 존 필기시험 문제
A={A=1;B=2;C=3;E={A=100;};};
A+={D=4;E={B=10;C=D;};};
규칙 A 는 첫 번 째 줄 에서 표시 한 바 와 같이 모든 규칙 은 하나의 문자열 로 표시 되 며, 몇 가지 규칙 을 통 해 규칙 A 에 하위 항목 을 추가 할 수 있 으 며, 하위 항목 이 같 으 면 이전의 값 을 덮어 쓸 수 있다.마지막 으로 아래 의 형식 을 통 해 규칙 A 의 내용 을 방문 할 수 있 습 니 다. 규칙 이름과 해당 하 는 값 은 A - z, a - z 와 0 - 9 만 포함 합 니 다.
A.E.B
A.A
A.E.A
설명, 하나의 규칙 에 포 함 된 비 포 함 된 규칙 은 하위 항목 으로 표시 합 니 다. 예 를 들 어 A. A, 규칙 에 포 함 된 규칙 은 하위 규칙 으로 A. E 와 같이 표시 합 니 다.
프로필 을 분석 하 는 프로그램 입 니 다. 원본 코드 를 드 리 겠 습 니 다.
다음은 자신 이 정의 한 두 개의 구조 체 로 각각 규칙 과 규칙 안의 하위 항목 을 나타 낸다.
struct rule_component{//      
	char *name; //          NAME_LEN,        ,    _name  
	char *value; //  ,          _value  ,         ,            
	char _name[NAME_LEN + 1];
	char _value[VALUE_LEN + 1];
	struct rule_component *next; //                     
};
struct rule{
	char *name; //          NAME_LEN,        ,    _name  
	char _name[NAME_LEN + 1];
	struct rule_component *head; //       
	struct rule *nested_head; //                
	struct rule *next; //     
};문자열 을 보 여 줍 니 다. 규칙 의 시작, 하위 항목 의 시작, 하위 규칙 의 시작 등 을 판단 해 야 합 니 다. 문자열 의 머리 부터 옮 겨 다 니 기 시작 합 니 다. = {를 만나면 규칙 의 시작 을 표시 합 니 다.규칙 이 끝난다.
이 두 데이터 구 조 를 관리 하 는 데 보조 함 수 를 추가 합 니 다.
char* is_rule_start(char *ptr)
{
	do{
		if(*ptr == '='){
			if(*(ptr + 1) == '{')
				return ptr;
			else
				return NULL;
		}
		ptr ++;
	}while(*ptr);
	return 0;
}
char* is_rule_append(char *ptr)
{
	do{
		if(*ptr == '='){
			if(*(ptr - 1) == '+')
				return ptr - 1;
			else
				 return NULL;
		}
		ptr ++;
	}while(*ptr);
	return NULL;
}
char* is_comp_start(char *ptr)
{
	char *res;
	do{
		if(*ptr == '='){
			if(*(ptr + 1) != '{')
				return ptr;
			else
				return NULL;
		}
		ptr ++;
	}while(*ptr);
	return 0;
}
int is_rule_end(char *ptr)
{
	if(ptr)
		return strstr(ptr, RULE_END) == ptr;
	return 0;
}위의 이러한 보조 함수 가 있 으 면 위의 규칙 을 해석 할 수 있 습 니 다. 전체 프로그램 은 다음 과 같 습 니 다. 테스트 함 수 를 포함 합 니 다.
struct rule* make_rule() //new  rule  
{
	struct rule *res;
	res = (struct rule*)malloc(sizeof(*res));
	if(res)
		memset(res, 0, sizeof(*res));
	res->name = res->_name;
	return res;
}
struct rule_component *make_rule_component() //new  rule_component  
{
	struct rule_component *res;
	res = (struct rule_component*)malloc(sizeof(*res));
	if(res)
		memset(res, 0, sizeof(*res));
	res->name = res->_name;
	res->value = res->_value;
	return res;
}
void free_rule(struct rule * r) //  rule  
{
	if(r){
		if(strlen(r->name) > NAME_LEN) // name     NAME_LEN, name     _name  ,    
			free(r->name);
		free(r);
	}
}
void free_rule_component(struct rule_component * c) //  rule_component  
{
	if(c){
		if(strlen(c->name) > NAME_LEN)
			free(c->name);
		if(strlen(c->value) > VALUE_LEN)
			free(c->value);
		free(c);
	}
}
void destroy_rule_recursive(struct rule *rule) //destroy  rule,     ,  
{
	struct rule *nested;
	struct rule_component *comp;
	comp = rule->head;
	while(comp){
		struct rule_component *tmp;
		tmp = comp->next;
		free_rule_component(comp);
		comp = tmp;
	}
	nested = rule->nested_head;
	while(nested){
		struct rule *tmp;
		tmp = nested->next;
		destroy_rule_recursive(nested);
		nested = tmp;
	}
	free_rule(rule);
}
void destroy_rule_list(struct rule *head) //destroy  rule   
{
	struct rule *tmp;
	while(head){
		tmp = head->next;
		destroy_rule_recursive(head);
		head = tmp;
	}
}이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.