C++에서 문자열을 구문 분석하는 간단한 방법으로 sscanf를 사용하기로 결정했습니다. 다음은 코드 예제입니다Sscanf 관련 문제
int x,y,level;
char type;
char *line=NULL;
if(inputMode=='M'){
while(cin.getline(line,200)){
sscanf(line,"(%d,%d,%d,%c)",x,y,level,type);
}
}
추출하려는 형식은 다음과 같습니다. 3 진수 값과 char 값을 추출해야하며, 읽은 파일의 모든 행은 동일한 형식을 갖습니다. 나는 char line [200]이라는 c-string을 만들었습니다. 저는 문자열이 테스트 될 때 파일 내의 최대 숫자가 수백만에이를 수 있다는 것을 얼마나 오래 알 수 있는지 결코 알지 못하기 때문에 임의의 크기로 200을 선택했습니다.
(3,2,1,#)
% d은 (는) int *를 예상한다고 말하는 오류가 발생합니다. 그래서 x, y, 레벨 및 포인터를 변경하여 포인터를이 문제를 해결할 것이라고 생각했지만 컴파일러에서 x, y, 레벨 및 유형이 함수에서 초기화되지 않았다고 말합니다. 그게 도움이된다면 최신 g ++ -Wall -Werror를 사용하여 컴파일 중입니다.
'sscanf에서 (선, "(% d 개, % d 개, % d 개 %의 C)", X, Y, 레벨을 &type);' – bobah
하고 싶은 것입니다 "나는하기로 결정 sscanf를 C++에서 문자열을 파싱하는 더 간단한 방법으로 사용하십시오. "** 잘못된 ** 결정입니다. 'sscanf()는 수영을 할 수없는 사람을 위해 1000 미터 깊이로 다이빙을하는 초심자처럼 간단합니다. , 어떤 상황에서도'scanf() '를 사용해서는 안된다. 나는이 함수가 잘못 되었기 때문에 C 언어로 사용하는 것을 꺼린다. 반 직관적 인 작은 단점을 가지고있어 사용법을 익히기가 어렵다. C++에서는 표준 클래스 ('std :: stringstream','std :: string')와 문자열을 파싱하는 함수를 사용합니다. C에서는'strtok()','strchr()'등을 사용합니다. –
괜찮아요, 내가 이미 그것을 통합했기 때문에 괜찮아요, stringstream으로 봐야 –