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

Extracting negative and positive fractions from a string in C

我有一行字符串 = VOLTAGE 0.231023459 CURRENT -0.234334567 0.345511234

如何从上面的行中提取负分数。 对于正值,我可以#define 字符串的索引并开始解析 it.But 这些值没有固定的符号,值可以是负数也可以是正数。 是否有一个函数可以从上面的行中分离出负分数和正分数。 isdigit() 只给出一个字符是否为无符号数字。

根据格式的固定程度,执行如下操作:

  1. 使用strtok拆分space个字符
  2. 对于每个标记,检查它是 VOLTAGE 还是 CURRENT,并相应地决定下一个标记的存储位置。
  3. 如果不是VOLTAGECURRENT,使用strtod将token转换为double,然后保存在合适的地方。

如果您的字符串始终采用这样的格式,您可以跟踪字符串 VOLTAGECURRENT。 并检查 space 之后是否存在 -。 (你已经可以得到数字了。)

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

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

好的,我找到路了!

#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 是这里的英雄!