2008-10-22 10 views
3

문자열 (char)이 있고 그 중 숫자를 추출하고 싶습니다.숫자 문자열을 정수로 변환

그래서 나는 문자열이 : 1 2 3 4 /0
을 그리고 지금은 몇 가지 변수를 원하는, 그래서 정수로 사용할 수 있습니다 : a=1, a=2, a=3, a=4

내가 어떻게 할 수 있습니까?

+0

문제는 (숙제입니까?) 그것을 이해하는 것입니다 ... 나는 그것을 시도하고 다시 형식화하는 것이 좋습니다. 아마도 atoi() 함수가 도움이 될 것입니다. – PhiLho

답변

2

는, 다음은 sscanf를 함께 할 수있는 : 숫자의 개수가 다릅니다 경우

sscanf(string, "%d %d %d %d", &a, &b, &c, &d); 

, 다음 문자열을 구문 분석해야합니다.

이에 따라 질문을 명확히하십시오.

+0

sscanf()는 성공적으로 변환되고 할당 된 지정자의 수를 반환합니다 ('% * d'표기법을 사용하여 억제 된 수는 계산하지 않습니다). –

2

sscanf()가이를 수행 할 수 있습니다. 문자열이 항상 공백으로 구분 된 4 개의 숫자가 포함 된 경우

#include <stdio.h> 

int main(void) 
{ 
    int a, b, c, d; 
    sscanf("1 2 3 4", "%d %d %d %d", &a, &b, &c, &d); 
    printf("%d,%d,%d,%d\n", a, b, c, d); 
} 
3

다른 사람들도 언급했듯이 몇 개의 숫자가 필요한지 알고 있다면 sscanf가 가장 쉬운 해결책입니다. 그렇지 않은 경우 다음은보다 일반적인 솔루션을 스케치합니다.

먼저 문자열을 공백으로 토큰 화합니다. 이에 대한 표준 C 방법은 strtok()입니다 :

char* copy; 
char* token; 

copy = strdup(string); /* strtok modifies the string, so we need a copy */ 

token = strtok(copy, " "); 
while(token!=NULL){ 
    /* token now points to one number. 
    token = strtok(copy, " ");  
} 

그런 다음 정수로 문자열을 변환합니다. atoi() 그렇게 할 것입니다.

+0

생성 된 사본을 정리하지 마십시오. – Tetha

+0

잘 정의 된 오류 처리 기능이 있으므로 atoi() 대신 strtol()을 사용하는 것이 좋습니다. 또한 strdup()는 C 표준 함수가 아닙니다 (POSIX에 있음). 자신의 strdup() 구현은 쉽지 않습니다. 물론, 복사본은 free() 후에 있어야합니다. – Chris

4

문자열이 예상대로 포맷되어있는 한 지금까지의 답변은 정확합니다. 당신은 항상 sscanf의 반환 값을 검사하여 정상적으로 작동하는지 확인해야합니다. sscanf를 buf에가 "1 2 3"또는 "1 2 A B"또는 뭔가, sscanf를가 반환 짧은 ​​항목 수 있었다면 전환의 횟수가 성공적으로 위의 경우 4

if (4 != sscanf(buf, "%d %d %d %d", &a, &b, &c, &d)) 
{ 
    /* deal with error */ 
} 

에서 수행 반환합니다.

관련 문제