2012-11-03 231 views
0

我想知道是否可以在字符串「102.33,220.44」中將字符串轉換爲C中的double [],並且如果是這樣做?將逗號分隔的字符串轉換爲雙重字符

+7

是的,這是可能的。 –

+1

我提出這個問題是因爲noobs需要幫助解決簡單的問題,除非有人指出這個問題重複的確切問題,否則我會堅持使用我的槍支。 SO宣稱的目標之一是成爲新手和大師們的首選聚集地。注意你......我也贊成那種無知的「是的,這是可能的」評論,因爲那是我的幽默感......額外的乾燥! – corlettk

+0

您的主要錯誤在於沒有將問題分解爲其組成問題。您需要首先將字符串分解爲兩個子字符串,然後解析每個子字符串以提取數字。如果你不能「得到」如何「分解」一個問題的一般概念,你將會遇到很多麻煩。 –

回答

2

的一種方式是使用與strtok' '','作爲分隔符,並且向strtod每個令牌轉換爲雙,其然後可以被存儲在數組中。你應該能有一些小的修改,這個示例代碼的strtok做到這一點:

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的大多數實現都會拋出一個給定一個空輸入字符串的SIG11 ...最好測試它(即使你不需要它,也可以保持代碼的可移植性)。和(現在我想起來)strtok的許多實現也SIGSEG上「未找到令牌」......所以sscanf通常是更可靠的選擇。 – corlettk

+0

我用NULL作爲第一個輸入與海灣合作委員會和Visual Studio的strtok好吧,但sscanf似乎是一個更多樣化的選擇,並不需要像上述兩種不同的方式調用。 –

2

您可以使用sscanfstrtodstrtok是沒有必要的)。如果你想得到字符串中的下一個數字(例如你的例子中的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; 
} 
相關問題