将int和float的字符串转换为C中的float数组

时间:2014-03-10 16:36:56

标签: c arrays string casting floating-point

我要做的是通过网络发送字符串。关键是接收字符串的服务器必须将所有数字的总和发送回去。所以我认为最简单的方法是取字符串并将其放在一个浮点数组中(如果整数进入那里并不重要,因为最终的总和将是一个浮点数)。

不幸的是,我不知道该怎么做,或者更确切地说,如何处理它。我如何从一个字符串中取1到1的数字(比方说,每个数字用空格分隔)?必须有一些功能,但我找不到它。

unix下的语言是普通的C.

4 个答案:

答案 0 :(得分:4)

使用strtod()将字符串中的第一个数字转换为double。将它添加到您的总和中,然后使用endptr返回值参数来确定是否需要转换另一个,如果是,则从哪里转换。迭代直到处理完整个字符串。

strtod()的原型是:

double strtod(const char *nptr, char **endptr);

另请注意,将整数视为浮点时可能会遇到精度问题。

答案 1 :(得分:1)

您可以使用fscanf从流中读取,就像使用scanf从stdin读取一样。

答案 2 :(得分:0)

您可以使用strtok分割字符串,atof将其转换为浮动。

char* p;
float farr[100];
int i = 0;
//str is your incoming string
p = strtok(str," ");
while (p != NULL)
{
    farr[i] = atof(p);
    p = strtok(NULL, " ");
}

我刚刚在在线编译器中运行它 - http://ideone.com/b3PNTr

答案 3 :(得分:-1)

您可以使用sscanf()从字符串中读取格式化的输入     你可以使用像

这样的东西
string=strtok(input," ")
while(string!=NULL)
{ sscanf(string,"%f",&a[i]);
  i++;
string=strtok(NULL," ");
}

在循环中。您甚至可以使用atof()而不是使用带有%f的sscanf()。