如何根据格式说明符验证浮点数?

时间:2011-06-30 09:47:28

标签: c++ visual-c++

我想根据格式说明符验证用户输入。例如格式说明符%4.5f,%4f,%10.5f等。如果我指定%5.2f作为格式说明符我应该能够验证用户输入是否为是否满足给定格式%5.2f?

注意:我在Windows环境中使用C ++。

1 个答案:

答案 0 :(得分:2)

您需要对正则表达式进行字符串匹配。表达式应为:

[0-9]{n}\.[0-9]{m}

此处 n m 是要获得的位数。您可以从字符串构建正则表达式,因此只需从参数中创建模式字符串,然后构造正则表达式;在C ++ 0x编译器上只有<regex>(否则为<tr1/regex>)。

小心匹配整个输入字符串或按字边界包围表达式,以避免12345.67890与m = 2匹配,n = 2为“45.67”。


编辑:以下是一种方法:

std::regex make_pattern(size_t m, size_t n)
{
  std::ostringstream ss;
  ss << "\b([0-9]{" << std::dec << m << "}\\.[0-9]{" << n << "})\b";
  return std::regex(ss.str());
}

/* later */

std::regex rx = make_pattern(4, 5);
std::string input = get_input();
const bool is_valid = std::regex_match(input, rx);