在线等,大侠请帮忙:如何提取字符串中的小数,并转换为浮点数。。

superqf 2010-05-06 12:38:01
比如将字符串:#A123 0.1234,-0.6876,0.3456,-0.1278 中的小数连同符号提取出来。。并转换为浮点型,使其能够进行数据处理。。

谢谢大家踊跃发言,不胜感激!..
...全文
444 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
superqf 2010-05-07
  • 打赏
  • 举报
回复
谢谢大家的踊跃发言,小弟已经搞定了,,学到不少东西。。谢谢。!
处处留心 2010-05-06
  • 打赏
  • 举报
回复
find mid 这几个函数找到哪个要找的数,然后再在数中找“.”,再转换
晨星 2010-05-06
  • 打赏
  • 举报
回复
借助sscanf应该可以吧。
就像scanf是从命令行窗口提取,sscanf是从字符串中提取。
weilong8998 2010-05-06
  • 打赏
  • 举报
回复
六楼的,也是我想说的
kingstarer 2010-05-06
  • 打赏
  • 举报
回复
有什么规律啊

一般这种东西用脚本处理比较好
白云飘飘飘 2010-05-06
  • 打赏
  • 举报
回复
int main()
{

char *str=":#A123 0.1234,-0.6876,0.3456,-0.1278";
stringstream ss(str);
ss.str(str);
double d;
int temp;
while(!ss.eof())
{
temp=ss.peek();
if (isdigit(temp)||temp=='-')
ss>>d,cout<<d<<endl;
else ss.ignore();
}

return 0;

}
weikaty 2010-05-06
  • 打赏
  • 举报
回复
声明一个字符串数组.查找这个字符串,把0.后面的字符串为数字的,把到一个数组中去,直到不是一个数字,一个while 既可。然后再将数组中的字符串,转换为数字
jessciayan 2010-05-06
  • 打赏
  • 举报
回复
我觉得你应该先将这些小数提取出来再将它们转换。
周靖峰 2010-05-06
  • 打赏
  • 举报
回复
不会啊
superqf 2010-05-06
  • 打赏
  • 举报
回复
对了,补充一句,小弟要处理的是几百甚至几千个数据。。可现在电脑返回的数据都是以字符串形式返回的。。所以需要先转换一下类型。。
大家有什么好办法,说给小弟听听吧。。谢谢了。。
qq675927952 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhao4zhong1 的回复:]
记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”

C/C++ code
#include <stdio.h>
float f1,f2,f3,f4;
char s[]="#A123 0.1234,-0.6876,0.3456,-0.1278";
int main() {
sscanf(s,"#A123 %f……
[/Quote]

up
qq675927952 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 koolxiaoyuer 的回复:]
● atof():将字符串转换为双精度浮点型值。

● atoi():将字符串转换为整型值。

● atol():将字符串转换为长整型值。

● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。

● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。

● strtoul():将字符串转换为无符号长整型……
[/Quote]


up
赵4老师 2010-05-06
  • 打赏
  • 举报
回复
记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”
#include <stdio.h>
float f1,f2,f3,f4;
char s[]="#A123 0.1234,-0.6876,0.3456,-0.1278";
int main() {
sscanf(s,"#A123 %f,%f,%f,%f",&f1,&f2,&f3,&f4);
printf("%g %g %g %g\n",f1,f2,f3,f4);
return 0;
}
linsen_519 2010-05-06
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
#include <boost/algorithm/string.hpp>
using namespace std;

int main() {
string s("-0.265");
if(boost::algorithm::contains(s,".")){
float a=atof(s.c_str());
cout << a << endl;
}
}
beihanggraduate 2010-05-06
  • 打赏
  • 举报
回复
寻找.就可以饿了,
ycf2007214250 2010-05-06
  • 打赏
  • 举报
回复
#include<stdio.h>
#include <string.h>
int main(){
char buf[521];
sscanf("-0.6876","%s",buf);
printf("%s\n ",buf);


return 0;}
可以得到-0.6876 要是#A233就不行了
koolxiaoyuer 2010-05-06
  • 打赏
  • 举报
回复
● atof():将字符串转换为双精度浮点型值。

● atoi():将字符串转换为整型值。

● atol():将字符串转换为长整型值。

● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。

● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。

● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
lz看看符合你的要求不
waqianlang 2010-05-06
  • 打赏
  • 举报
回复
这个你或许可以试试字符判断吧,逐个字符判断再提取数据啊
superqf 2010-05-06
  • 打赏
  • 举报
回复
楼上各位能不能提供一个简单的源程序,供小弟参考啊。。?
谢谢了,,!
yanran_hill 2010-05-06
  • 打赏
  • 举报
回复
man strtod

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧