2013-03-27 2 views
0

어떻게 C에서 키 - 값 문자열을 구문 분석하고 적절한 변수에 할당합니까?c의 키 - 값을 구문 분석

e.e. 이 문자열을 프로그램에 전달합니다 :

x = 193 

이 값은 appr에 값을 할당합니다. 변수, 그래서

printf("%i", x); 

당신은 마술 실행시 변수를 도입 할 수

193 
+0

왜? _wider_ 목표는 무엇입니까? –

+0

떨어져 sscanf에서 하나의 답변에 지적했다, 당신은 또한 strstr() 함수를 볼 수 있습니다. – CuriousSid

답변

4

을 감안할 때

char keyname[32]; 
int val; 
우리가 정수 지정의 키 이름과 값의 이름을 저장할

, 우리는 우리를 위해 구문 분석을 할 sscanf() C 라이브러리 함수를 사용할 수있는 예제 형식 const char * str = "x = 193"의 문자열 예를 들어 str = " x = 193"는 유연한 구문을 원한다면 그래서 당신은 여전히 ​​여분의 공백을 제거 할 필요가 " x "keyname에 저장하는 문자열입니다

sscanf(str, "%32[^=]=%d", keyname, &val) 

하는 것으로 할당 주위의 공백 및 변수 이름 앞에.

sscanf()은 성공적인 전환 횟수를 반환하므로 여기서는 2을 반환하는지 테스트해야합니다. 당신이 변수 이름과 keynameval에 저장된의 정수 값을 가지고 일단

, 당신이 @unwind처럼 할 수는 위의 당신이 strcmp과 테스트, val를 할당해야하는 변수를 참조하는 것이 좋습니다. 고정 된 이름 변수가 많은 경우 테이블을 가져올 수 있고 look-up 함수를 사용하여 유지 보수가 불가능하고 오류가 발생하기 쉬운 긴 목록 인 if 문을보다 더 예쁘게 만들 수 있습니다.

1

을 생산하고 있습니다. C 프로그램이 실행 중일 때 변수의 이름은 오래 전에 사라졌습니다. 컴파일러는 코드를 작성하기 위해 정보를 필요로하지만 CPU가 코드를 실행하는 데 필요하지 않습니다.

알려진 변수 이름에 대해 strcmp()이 있어야하고 그에 따라 할당해야합니다. 이것을 (많은 이름 값에 대해) 최적화하기 위해 물론 hash table과 같은 것을 사용하여 이름과 정수 값 쌍을 저장할 수 있습니다.

+0

당신이 말하는 것이 정확하지만, OP의 예제 입력을 구문 분석하고 이것을 키 "x"에 지정된 값 193으로 저장하는 방법은 분명히 있습니다. S/그는 그 과정을 정확히 보여주지 못했지만, 문제의 해결책은 기존의 알려진 변수 이름에만 구속 될 필요가 없습니다. – mah

+0

@mah 어떻게 완료 되었습니까? –

+0

@ValeriyAntonov 만 c를 사용하면 약간의 단점이 있습니다. 예를 들어, C++은'map' 컨테이너를 사용하는 것을 더 쉽게하고 다른 시스템은 사전과 같은 것을 호출합니다. c를 사용하여 직접지도/사전을 구현하거나 좋은 구현을 찾아야합니다. http://stackoverflow.com/questions/5970656/c-dictionary-map 개인적으로 그 해결책을 시도하지는 못했지만 C에 대한 해결책을 제시하는 것처럼 보입니다. 너무 복잡하다면 항목 (및 지원 코드)을 보유하기 위해 {char * name, int value, struct * next} 구조체를 사용하여 간단한지도를 쉽게 만들 수 있습니다. – mah

관련 문제