C++怎么从一行字符串中提取想要的数字,如m=45.5,D=0.15494,l=0.89989,A=1.803,C=0.161,提前45.5等数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++怎么从一行字符串中提取想要的数字,如m=45.5,D=0.15494,l=0.89989,A=1.803,C=0.161,提前45.5等数字相关的知识,希望对你有一定的参考价值。

谢谢

C++有很多从字符串中提取数值的办法,不同类型的程序、不同的开发环境都有不少办法。

比较通用(但格式比较严格)的,是sscanf函数,从一个字符串中格式化提取整数、浮点数都没有问题。

比如:

char s[] = "m=45.5,D=0.15494";
double m,d;
sscanf(%*[^=]=%f,D=%f",&m,&d);

追问

非常感谢,我试试看

追答

不客气。
如果格式非常严格,直接:
m=%f,D=%f
这样就可以了,不需要正则匹配。

追问

应该是%lf,谢谢了。

参考技术A

把cout改成你想要的操作:

void print_integers(const char* str)

  char buf[255];
  int count = 0;
  for (int i = 0; ; i ++)
    
      char c = str[i];
      if ((c <= '9' && c >= '0') || c == '.')
  buf[count++] = c;
      else

  buf[count] = '\\0';
  count = 0;
  double num = atof(buf);
  cout << num << endl;

      if (c == '\\0')
break;
    

参考技术B float getNumberFromString(char * ch)

float t;
char * pc;
char * res = 0;
int count = 0;
int dotNum = 0;
int minusNum = 0;
for(pc = ch; *pc!=0; pc++)

if(*pc==46 || *pc==45 || (*pc>47&&*pc<57)

res = (char*)realloc(res,(count+1)*sizeof(char));
if(!res)

printf("out of memory!\n");
return 0.f;

res[count] = *pc;
if(*pc == 45)

if(count!=0 || minusNum!=0)

printf("erro string format!\n");
if(res)
free(res);
return 0.f;

else
minusNum += 1;

if(*pc==46)

if(dotNum!=0)

printf("erro string format!\n");
if(res)
free(res);
return 0.f;

else
dotNum += 1;

count +=1;


res = (char*)realloc(res,(count+1)*sizeof(char));
if(!res)

printf("out of memory!\n");
return 0.f;

res[count] = 0;
t = atof(res);
if(res)
free(res);
return t;

是我想复杂了???呵呵

以上是关于C++怎么从一行字符串中提取想要的数字,如m=45.5,D=0.15494,l=0.89989,A=1.803,C=0.161,提前45.5等数字的主要内容,如果未能解决你的问题,请参考以下文章

c++ 怎样提取一个字符串中的连续数字并放到另一个数组中保存? 急!

从字符串中查找并提取数字

如何用bash将每一行提取到不同的变量中

用java怎么从字母加数字的string中提取数字,是有规律的string,如point1,point2,point3

c++怎么提取字符串的一部分

c++中如何从字符串2015-6-8取出年月日