2012-11-03 2 views
0

"102.33, 220.44"와 같은 문자열을 C에서 double []로 변환 할 수 있는지 알고 싶습니다. 그렇다면 어떻게 수행합니까?쉼표로 구분 된 문자열을 double로 변환하십시오.

+7

예, 가능합니다. –

+1

나는 noobs가 간단한 질문에 도움이 필요하기 때문에 나는이 질문을 upvoted, 누군가가이 하나가 중복되는 정확한 질문을 지적하지 않는 한/나는 나의 총에 충실 할 것이다. SO의 진술 된 목표 중 하나는 멍청이들과 전문가들을위한 최고의 모임 장소가되는 것입니다. 너를 생각해 보라. 나는 또한 유머 감각이 강하기 때문에 그 narky를 "예, 가능하다"라고 덧붙였다. – corlettk

+0

여기에서 주된 실수는 문제를 구성 문제로 분해하지 않는 것입니다. 먼저 문자열을 두 개의 하위 문자열로 분리 한 다음 각 하위 문자열을 구문 분석하여 숫자를 추출해야합니다. 문제를 "파헤 치는"방법에 대한 일반적인 개념을 얻지 못하면 많은 문제가 발생할 것입니다. –

답변

2

한가지 방법은 어레이에 저장할 수있는 이중 각 토큰 변환 ' '과 같은 분리 ','strtod으로 strtok를 사용하는 것이다. 당신은 strtok를이 샘플 코드에 몇 가지 사소한 수정을 함께 할 수있을 것입니다 : 당신은 sscanf 또는 strtod을 사용할 수 있습니다

int main() 
{ 
    char str[] ="- This, a sample string."; 
    char * pch; 
    printf ("Splitting string \"%s\" into tokens:\n",str); 
    pch = strtok (str," ,.-"); 
    while (pch != NULL) 
    { 
    printf ("%s\n",pch); 
    pch = strtok (NULL, " ,.-"); 
    } 
    return 0; 
} 
+0

조심해! strtok의 대부분의 구현은 null 입력 문자열을 주어진 SIG11을 던집니다. 테스트 해보는 것이 가장 좋습니다 (코드를 이식 할 필요가 없더라도). 그리고 (이제는 내가 생각하기에) strtok의 많은 구현 또한 "토큰을 찾을 수 없습니다"라는 SIGSEG ... 그래서 sscanf는 일반적으로보다 안정적인 대안입니다. – corlettk

+0

gcc와 Visual Studio의 첫 번째 입력으로 NULL을 사용하는 strtok을 사용했지만 sscanf는 더 다양한 대안처럼 보이며 위의 두 가지 방법으로 호출 할 필요가 없습니다. –

2

(strtok이 필요하지 않습니다). 문자열의 다음 숫자 (예 : 220.44)를 얻고 싶다면 strtod을 사용하여 가장 먼저 숫자를 얻은 다음 쉼표를 건너 뛰고 반복하십시오.

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    char *p; 
    double val; 
    char str[] = " 102.33, 220.44"; 

    int n = sscanf(str, "%lf", &val); 
    printf ("Value = %lf sscanf returned %d\n", val, n); 

    val = strtod(str, &p); 
    printf ("Value = %lf p points to: '%s'\n", val, p); 

    return 0; 
} 
관련 문제