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에 따라 라이센스가 부여됩니다.