我有一行string = VOLTAGE 0.231023459 CURRENT -0.234334567 0.345511234
如何从上述行中提取负分数。
对于正值,我可以#define字符串的索引并开始解析它。但是没有固定的值,值可以是负数也可以是正数。
是否有从上述行中分离出负和正分数的功能。 isdigit()
仅表示字符是否为数字而没有符号。
答案 0 :(得分:1)
根据格式的固定方式,执行以下操作:
strtok
拆分空格字符VOLTAGE
还是CURRENT
,并相应地确定下一个令牌的存储位置。VOLTAGE
或CURRENT
,请使用strtod
将令牌转换为双精度,然后将其保存在适当的位置。 答案 1 :(得分:1)
如果您的字符串始终具有这样的格式,则可以跟踪字符串VOLTAGE
和CURRENT
。
在空格后检查-
是否存在。 (你已经能够获得数字。)。
或者这是更好的解决方案:
首先跳过非数字,然后使用strtok
获取数字:
float get_Numbers(const char *str)
{
/* Skip non-digit and handle the - cases in your string */
while (*str && !(isdigit(*str) || ((*str == '-' || *str == '+') && isdigit(*(str + 1)))))
str++;
return strtod(str, NULL);
}
答案 2 :(得分:0)
好的,我找到了路!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
float voltage,current1,current2;
char voltages[20], current[20], dtm[100];
strcpy( dtm, "VOLTAGE 0.231023459 CURRENT -0.234334567 0.345511234");
sscanf( dtm, "%s %f %s %f %f", voltages,&voltage,current,¤t1, ¤t2);
printf("voltage = %f \n",voltage);
printf("current1 = %f \n",current1);
printf("current2 = %f \n",current2);
return(0);
}
所以sscanf就是这里的英雄!