从C中的字符串中提取负分数和正分数

时间:2015-03-12 10:42:12

标签: c fractions negative-number

我有一行string = VOLTAGE 0.231023459 CURRENT -0.234334567 0.345511234

如何从上述行中提取负分数。 对于正值,我可以#define字符串的索引并开始解析它。但是没有固定的值,值可以是负数也可以是正数。 是否有从上述行中分离出负和正分数的功能。 isdigit()仅表示字符是否为数字而没有符号。

3 个答案:

答案 0 :(得分:1)

根据格式的固定方式,执行以下操作:

  1. 使用strtok拆分空格字符
  2. 对于每个令牌,请检查其是VOLTAGE还是CURRENT,并相应地确定下一个令牌的存储位置。
  3. 如果它不是VOLTAGECURRENT,请使用strtod将令牌转换为双精度,然后将其保存在适当的位置。

答案 1 :(得分:1)

如果您的字符串始终具有这样的格式,则可以跟踪字符串VOLTAGECURRENT。 在空格后检查-是否存在。 (你已经能够获得数字。)。

或者这是更好的解决方案:

首先跳过非数字,然后使用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,&current1, &current2);

   printf("voltage = %f \n",voltage);
   printf("current1 = %f \n",current1);
   printf("current2 = %f \n",current2);

   return(0);
}

ideone link here

所以sscanf就是这里的英雄!