2012-11-03 186 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; 
} 
相关问题