어떻게 C에서 키 - 값 문자열을 구문 분석하고 적절한 변수에 할당합니까?c의 키 - 값을 구문 분석
e.e. 이 문자열을 프로그램에 전달합니다 :
x = 193
이 값은 appr에 값을 할당합니다. 변수, 그래서
printf("%i", x);
당신은 마술 실행시 변수를 도입 할 수
193
어떻게 C에서 키 - 값 문자열을 구문 분석하고 적절한 변수에 할당합니까?c의 키 - 값을 구문 분석
e.e. 이 문자열을 프로그램에 전달합니다 :
x = 193
이 값은 appr에 값을 할당합니다. 변수, 그래서
printf("%i", x);
당신은 마술 실행시 변수를 도입 할 수
193
을 감안할 때
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
을 반환하는지 테스트해야합니다. 당신이 변수 이름과 keyname
및 val
에 저장된의 정수 값을 가지고 일단
, 당신이 @unwind처럼 할 수는 위의 당신이 strcmp
과 테스트, val
를 할당해야하는 변수를 참조하는 것이 좋습니다. 고정 된 이름 변수가 많은 경우 테이블을 가져올 수 있고 look-up 함수를 사용하여 유지 보수가 불가능하고 오류가 발생하기 쉬운 긴 목록 인 if
문을보다 더 예쁘게 만들 수 있습니다.
을 생산하고 있습니다. C 프로그램이 실행 중일 때 변수의 이름은 오래 전에 사라졌습니다. 컴파일러는 코드를 작성하기 위해 정보를 필요로하지만 CPU가 코드를 실행하는 데 필요하지 않습니다.
알려진 변수 이름에 대해 strcmp()
이 있어야하고 그에 따라 할당해야합니다. 이것을 (많은 이름 값에 대해) 최적화하기 위해 물론 hash table과 같은 것을 사용하여 이름과 정수 값 쌍을 저장할 수 있습니다.
당신이 말하는 것이 정확하지만, OP의 예제 입력을 구문 분석하고 이것을 키 "x"에 지정된 값 193으로 저장하는 방법은 분명히 있습니다. S/그는 그 과정을 정확히 보여주지 못했지만, 문제의 해결책은 기존의 알려진 변수 이름에만 구속 될 필요가 없습니다. – mah
@mah 어떻게 완료 되었습니까? –
@ValeriyAntonov 만 c를 사용하면 약간의 단점이 있습니다. 예를 들어, C++은'map' 컨테이너를 사용하는 것을 더 쉽게하고 다른 시스템은 사전과 같은 것을 호출합니다. c를 사용하여 직접지도/사전을 구현하거나 좋은 구현을 찾아야합니다. http://stackoverflow.com/questions/5970656/c-dictionary-map 개인적으로 그 해결책을 시도하지는 못했지만 C에 대한 해결책을 제시하는 것처럼 보입니다. 너무 복잡하다면 항목 (및 지원 코드)을 보유하기 위해 {char * name, int value, struct * next} 구조체를 사용하여 간단한지도를 쉽게 만들 수 있습니다. – mah
왜? _wider_ 목표는 무엇입니까? –
떨어져 sscanf에서 하나의 답변에 지적했다, 당신은 또한 strstr() 함수를 볼 수 있습니다. – CuriousSid