检查字符串中的float并返回结果?

时间:2009-05-22 10:48:02

标签: c++

我有一个文本文件,我geline到一个字符串。该文件如下:0.2abc 0.2 .2abc .2 abc.2abc abc.2 abc0.20 .2 . 20

我想检查结果,然后将其解析为单独浮动。结果是:0.2 0.2abc 2 20 2abc abc0.20 abc

这是有效的:检查是否有2位数(在'。'(完全停止)之前和之后)是否有char。如果只有1个网站的'。'是数字'。'将是句号。

如何解析STRING以分离结果?我确实用iterator来检查'。'和它的位置,但仍然卡住了。

4 个答案:

答案 0 :(得分:1)

您需要做的第一件事是用文字分割输入。容易,只是不要使用.getline() 但是依赖于'while(cin>> strWord){/ *用词* /}来做事;

第二件事是提前输出错误的输入词:2个字符或更少的字,有多个.,或.的第一个或最后一个字。

您现在知道.位于中间位置。 find()会给你一个迭代器。 ++和 - 为您提供下一个和以前的迭代器。 *为您提供迭代器指向的字符。 isdigit()告诉您该字符是否为数字。添加成分,你就完成了。

答案 1 :(得分:1)

看起来像上面一些相当复杂的建议 - 并不一定有帮助。

您的问题并没有完全清楚最终结果应该是什么样子。你想要一个浮点数的数组吗?你想要总和吗?你想打印出结果吗?

如果您需要家庭作业的帮助,最好的政策是发布您自己的尝试,然后其他人可以帮助您改进它,使其发挥作用。

一种可能有用的方法是尝试将字符串分解为子字符串(标记)并丢弃垃圾。

  • 编写一个接受字符并返回true的函数(这是浮点数的一部分)或false(不是)。
  • 使用迭代器或索引沿字符串扫描。
  • 虽然当前字符不是令牌的一部分,但请跳过它。
  • 如果找到令牌char,而当前char是令牌的一部分,则将其复制到另一个字符串
  • 等。得到所有浮点子串。
  • 然后你可以使用std :: stringstream或:: atof()来转换。

稍等一下,发布你可以做的事情。

答案 2 :(得分:0)

听起来你可以使用一些正则表达式来提取你的号码。

尝试使用此正则表达式以提取字符串中的浮点值。

[0-9]+\.[0-9]+

请记住,这不会提取整数值。即234abc

我不知道是否有一种在c ++中使用正则表达式的内置方法,但我发现this库有一个快速谷歌搜索,允许你在c ++中使用正则表达式

答案 3 :(得分:0)

听起来你应该看看“口译员”设计模式。

或者您可以使用“状态”设计模式并手动完成。

网上应该有很多这两个例子。