从 C 中的字符串中提取负分数和正分数
Extracting negative and positive fractions from a string in C
我有一行字符串 = VOLTAGE 0.231023459 CURRENT -0.234334567 0.345511234
如何从上面的行中提取负分数。
对于正值,我可以#define 字符串的索引并开始解析 it.But 这些值没有固定的符号,值可以是负数也可以是正数。
是否有一个函数可以从上面的行中分离出负分数和正分数。 isdigit()
只给出一个字符是否为无符号数字。
根据格式的固定程度,执行如下操作:
- 使用
strtok
拆分space个字符
- 对于每个标记,检查它是
VOLTAGE
还是 CURRENT
,并相应地决定下一个标记的存储位置。
- 如果不是
VOLTAGE
或CURRENT
,使用strtod
将token转换为double,然后保存在合适的地方。
如果您的字符串始终采用这样的格式,您可以跟踪字符串 VOLTAGE
和 CURRENT
。
并检查 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,¤t1, ¤t2);
printf("voltage = %f \n",voltage);
printf("current1 = %f \n",current1);
printf("current2 = %f \n",current2);
return(0);
}
所以 sscanf 是这里的英雄!
我有一行字符串 = VOLTAGE 0.231023459 CURRENT -0.234334567 0.345511234
如何从上面的行中提取负分数。
对于正值,我可以#define 字符串的索引并开始解析 it.But 这些值没有固定的符号,值可以是负数也可以是正数。
是否有一个函数可以从上面的行中分离出负分数和正分数。 isdigit()
只给出一个字符是否为无符号数字。
根据格式的固定程度,执行如下操作:
- 使用
strtok
拆分space个字符 - 对于每个标记,检查它是
VOLTAGE
还是CURRENT
,并相应地决定下一个标记的存储位置。 - 如果不是
VOLTAGE
或CURRENT
,使用strtod
将token转换为double,然后保存在合适的地方。
如果您的字符串始终采用这样的格式,您可以跟踪字符串 VOLTAGE
和 CURRENT
。
并检查 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,¤t1, ¤t2);
printf("voltage = %f \n",voltage);
printf("current1 = %f \n",current1);
printf("current2 = %f \n",current2);
return(0);
}
所以 sscanf 是这里的英雄!