2013-01-17 5 views
0

나는 이것을 알아 내려고 노력해 왔으며, 해결 방법이있다.하지만 나는 분명히 뭔가 빠져 있지 않은지 확인하고 싶었다. 기본적으로 특정 규칙을 따르는 일련의 명령이 있습니다. 숫자, ASCII 문자 또는 특정 기호가 포함 된 것은 모두 토큰이며 <,>, |, & &, 등은 구분 기호입니다. 나는 방금 발견 한 것을 알 수 있고 배열에 저장할 수 있어야합니다. C - sscanf로 공백 무시하기

그래서 while 루프에서 나는

a = sscanf (cp, "%[[email protected]:/-.,^+% ]", str); 

은 내가 다른 방법을 알아낼 수 없기 때문에 찾기 위해 기호 중 하나로서 공간을 포함 시켰 있습니다. 나는 단어를 얻을 (플러스 가능한 공간을 남원) 후 대신에, 나는 전화

delimiters[] = " "; 
token = strtok(str, delimiters); 
(공백이 없었다 경우, 그냥 단어를 변경하지 않습니다 단지 토큰으로 나를 떠나 공백을 제거해야

). sscanf와 비슷한 것을 할 수있는 방법이 있다면 궁금 할 것입니다. 그 사이에 공백이 있으면 문자열이 이미 깨져 있다는 것을 알고 있기 때문입니다. 그러나 다시 호출하고 공백을 발견하면 그냥 읽지 않습니다. 아무것도.

그렇지 않은 경우에도 문제가 없습니다. 내 하루 종일 괴롭 히고있어.

+0

[C에서 sscanf를 사용하는 공백을 무시하는] 가능한 복제본 (http://stackoverflow.com/questions/5292826/ignoring-whitespace-with-sscanf-in-c) –

답변

1

당신은 당신의 형식을 변경할 수

a = sscanf (cp, " %[[email protected]:/-.,^+%]", str); 

형식에있는 주요한 ' ' 공백 문자의 [비어] 순서를 건너 뛰고, 다음이 아닌 공간을 허용 토큰의 순서로 스캔 것 문자.

+0

하지만 그럴 필요는 없습니다. 내 문자열 앞의 공백? 따라서 토큰과 구분 기호 사이에 공백이 없더라도 여전히 작동합니까? (미안하지만 나 자신을 확인 하겠지만 순간에 내 휴대폰에있다.) – user1777900

+0

@ user1777900 문자열이 존재하면 공백 앞에있는 모든 공백을 건너 뛰는 것을 의미한다. – WhozCraig

+0

@ user1777900 형식 문자열의 공백이 소비하는 공백 순서가 비어있을 수 있습니다. 공백이 없으면 psace는 공백 토큰의 빈 시퀀스를 찾습니다. –