在C语言中将整型和浮点型字符串转换为浮点型数组
我想做的是通过网络发送一个字符串。关键是接收字符串的服务器必须计算所有数字的总和并将其发送回。因此,我认为最简单的方法是获取字符串并将其放入浮点数组中(int是否也在其中并不重要,因为最终的和将是一个浮点数) 不幸的是,我不知道该怎么做,或者更确切地说,我不知道该怎么做。如何从字符串中提取1乘1的数字(假设每个数字之间用空格分隔)?一定有一些功能,但我找不到 unix下的语言是纯C语言 用于将字符串中的第一个数字转换为在C语言中将整型和浮点型字符串转换为浮点型数组,c,arrays,string,casting,floating-point,C,Arrays,String,Casting,Floating Point,我想做的是通过网络发送一个字符串。关键是接收字符串的服务器必须计算所有数字的总和并将其发送回。因此,我认为最简单的方法是获取字符串并将其放入浮点数组中(int是否也在其中并不重要,因为最终的和将是一个浮点数) 不幸的是,我不知道该怎么做,或者更确切地说,我不知道该怎么做。如何从字符串中提取1乘1的数字(假设每个数字之间用空格分隔)?一定有一些功能,但我找不到 unix下的语言是纯C语言 用于将字符串中的第一个数字转换为double。将其添加到总和中,然后使用endptr返回值参数确定是否需要转换
double
。将其添加到总和中,然后使用endptr
返回值参数确定是否需要转换另一个值,如果需要,从何处转换。迭代直到处理完整个字符串
strod()
的原型是:
double strtod(const char *nptr, char **endptr);
还请注意,将整数视为浮点时可能会遇到精度问题。用于将字符串中的第一个数字转换为双精度。将其添加到总和中,然后使用endptr
返回值参数确定是否需要转换另一个值,如果需要,从何处转换。迭代直到处理完整个字符串
strod()
的原型是:
double strtod(const char *nptr, char **endptr);
还请注意,当将整数视为浮点时,可能会遇到精度问题。可以使用scanf从流中读取,就像使用scanf从stdin读取一样。可以使用scanf从流中读取,就像使用scanf从stdin读取一样。可以使用sscanf()从字符串读取格式化输入。
你可以用像
string=strtok(input," ")
while(string!=NULL)
{ sscanf(string,"%f",&a[i]);
i++;
string=strtok(NULL," ");
}
在一个循环中。您甚至可以使用atof()而不是将sscanf()与%f一起使用。您可以使用sscanf()从字符串读取格式化输入。
你可以用像
string=strtok(input," ")
while(string!=NULL)
{ sscanf(string,"%f",&a[i]);
i++;
string=strtok(NULL," ");
}
在一个循环中。您可以使用偶数atof()而不是将sscanf()与%f一起使用。您可以使用strtok
拆分字符串,并使用atof
将其转换为float
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, " ");
}
我刚刚在一个在线编译器中运行了它-您可以使用strtok
拆分字符串,并使用atof
将其转换为float
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, " ");
}
我刚刚在一个在线编译器中运行了它-在您的示例中,您在sscanf()
上遗漏了一个“s”。这并没有说明如何跳过string
的开头以获得下一个数字。@unwind ya right。现在我已经指定了如何获取字符串。在您的示例中,您在sscanf()
上遗漏了一个“s”。这并没有说明如何跳过string
的开头以获取下一个数字。@unwind ya right。现在我已经指定了如何获取string.IMO,这是最好的解决方案。其他解决方案都使用“邪恶”函数来修改参数或维护内部状态。这显然是最简单的解决方案,这正是我想要的。我对此有点争论,因为我不知道终结器应该从哪里来,但唉,我让它工作了。谢谢。IMO,这是最好的解决方案。其他解决方案都使用“邪恶”函数来修改参数或维护内部状态。这显然是最简单的解决方案,这正是我想要的。我对此有点争论,因为我不知道终结器应该从哪里来,但唉,我让它工作了。非常感谢。