공백으로 구분 된 정수의 여러 행을 포함하는 파일을 C로 분석하여 동적 배열의 동적 배열로 변환하려고합니다. 각 행은 배열 배열의 배열입니다. 행의 수와 각 행의 요소는 일정하지 않습니다.C에서 공백으로 분리 된 여러 공백의 문자열을 구문 분석합니다.
내가 지금까지 한 것은 fgets를 사용하여 각 줄을 문자열로 잡는 것입니다.
그러나 공백으로 구분 된 정수 문자열을 구문 분석하는 방법을 알 수는 없습니다.
나는 (공백으로 구분 된 정수의 전체 파일을 구문 분석하는 데 fscanf를 사용할 수 있기 때문에) sscanf를 사용할 수 있다고 생각했습니다. 그러나 sscanf에는 다른 기능이 있습니다. sscanf는 문자열의 첫 번째 숫자 만 구문 분석합니다. 내 생각 엔 그 줄은 문자열이 아니기 때문에 스트림입니다.
스트리밍 스트림을 만드는 방법을 둘러 보았지만 C (비표준 라이브러리를 사용할 수 없음)에서 사용할 수있는 것처럼 보이지 않습니다.
char* line;
char lineBuffer[BUFFER_SIZE];
FILE *filePtr;
int value;
...
while((line = fgets(lineBuffer, BUFFER_SIZE, filePtr)) != NULL) {
printf("%s\n", lineBuffer);
while(sscanf(lineBuffer, "%d ", &value) > 0) {
printf("%d\n", value);
}
}
내가 문자열을 구문 분석하는 데 사용할 수있는 뭔가가 있나요. 그렇지 않은 경우이 전체 시스템에 대한 대안이 있습니까? 나는 REGEX를 사용하지 않는 것을 선호한다. 존재하는 경우 경기의 마지막에 대한 포인터, 현재 위치를 저장하는 문자 포인터를 제공
예 : ['strtok'] (http://en.cppreference.com/w/c/string/byte/strtok)를 사용하여 공간에서 문자열을 분리 한 다음 ['sscanf'] (http : // en. cppreference.com/w/c/io/fscanf) 또는 ['strtol'] (http://en.cppreference.com/w/c/string/byte/strtol)를 참조하십시오. –
관련 - https://stackoverflow.com/questions/10826953/sscanf-doesnt-move-scans-same-integer-everytime-c 및 https://stackoverflow.com/questions/13503135/get-number-of-characters -read-by-sscanf. 귀하의 질문에 대한 답변이 있기 때문에 중복 된 것으로 투표 할 것입니다. – sashoalm
또한 "% d"형식은 선행 공백을 건너므로 수동으로 형식으로 수행 할 필요가 없습니다. –