문자열 (char)이 있고 그 중 숫자를 추출하고 싶습니다.숫자 문자열을 정수로 변환
그래서 나는 문자열이 : 1 2 3 4 /0
을 그리고 지금은 몇 가지 변수를 원하는, 그래서 정수로 사용할 수 있습니다 : a=1, a=2, a=3, a=4
내가 어떻게 할 수 있습니까?
문자열 (char)이 있고 그 중 숫자를 추출하고 싶습니다.숫자 문자열을 정수로 변환
그래서 나는 문자열이 : 1 2 3 4 /0
을 그리고 지금은 몇 가지 변수를 원하는, 그래서 정수로 사용할 수 있습니다 : a=1, a=2, a=3, a=4
내가 어떻게 할 수 있습니까?
는, 다음은 sscanf를 함께 할 수있는 : 숫자의 개수가 다릅니다 경우
이sscanf(string, "%d %d %d %d", &a, &b, &c, &d);
, 다음 문자열을 구문 분석해야합니다.
이에 따라 질문을 명확히하십시오.
sscanf()는 성공적으로 변환되고 할당 된 지정자의 수를 반환합니다 ('% * d'표기법을 사용하여 억제 된 수는 계산하지 않습니다). –
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);
}
다른 사람들도 언급했듯이 몇 개의 숫자가 필요한지 알고 있다면 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() 그렇게 할 것입니다.
문자열이 예상대로 포맷되어있는 한 지금까지의 답변은 정확합니다. 당신은 항상 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 */
}
에서 수행 반환합니다.
문제는 (숙제입니까?) 그것을 이해하는 것입니다 ... 나는 그것을 시도하고 다시 형식화하는 것이 좋습니다. 아마도 atoi() 함수가 도움이 될 것입니다. – PhiLho