C ++从长字符数组中获取浮点数

时间:2015-04-02 16:00:39

标签: c++ arrays scanf

这可能是一个新手问题,但我在搜索中找不到答案。 我有一个变量: char buffer [128]; 现在我已经通过搜索脚本实现了它的价值,从一个大文件到:

“密度@ 15°C kg / m3 990.1(991.0 Max).BR.Viscocity @ 50°C cSt 355。”

这是我特别感兴趣的128个字符的特定行,更具体地说是浮点数“990.1”。我需要从我的所有文件中得到这一点,所以让程序搜索特定文本是不行的(我需要循环遍历很多文件),它必须搜索第一个浮点数。我一直在尝试sscanf,但现在已经坚持了一段时间,所以我想我会问。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

如果您要查找的浮动值在kg/m3(空格)之间始终,您可以使用strstr来提取字符串然后转换为float。

http://www.cplusplus.com/reference/cstring/strstr/

char *start;
char *end;
double val;

start = strstr( buffer, "kg/m3 " );
start += 6;
end = strstr( start, " " );
*end = 0;

val = atof( start );
*end = ' ';

请注意,我查找终止空间并转换为空终止字符。

所以atofstart开始解析缓冲区,并在最后一位数后停止。

稍后我恢复空间以保持原始字符串不变。

答案 1 :(得分:0)

感谢所有人的投入。所以我通过使用解析来回答πάνταῥεῖ的评论答案,主要是因为在Paolo的建议中给出了 me 问题的空白。这对我有用:

            float num;
            string dummy;
            istringstream iss( buffer );
            while( !iss.eof() && dummy != "(") 
            {
                iss >> num;
                if(iss.fail()) {

                    iss.clear();
                    iss >> dummy;
                    continue;
                }                   
            }