如何比较包含十进制值的两个字符串?

时间:2013-02-23 19:48:50

标签: c++ string overflow precision stringstream

以下是我正在做的事情:

if (oss.str() != sValue)

我可以举例如:

2000000000.0002000000000.0

这是相同的值,但不是相同的字符串。我需要在字符串中比较它,因为我试图捕捉sValue的最终溢出。

在这种情况下,我可以这样做:

oss << std::setprecison(1) << std::fixed << value;

但如果我有问题,问题就会一样:

2000000000.12000000000.123

我该如何解决?

提前致谢。

3 个答案:

答案 0 :(得分:1)

从小数位开始,进行两组比较,在每次迭代时解析和比较一位数,然后转到相反的位置。

答案 1 :(得分:0)

您可以使用

中的strncmp()函数
   int strncmp(const char *s1, const char *s2, size_t n);

使用std :: string上的c_str()方法和n = min(s1.length(),s2.length());

使用boost

可以更轻松地使用整数比较

boost::lexical_cast<int>(s1) == boost::lexical_cast<int>(s2)

对于std :: string s1,s2完成这项工作。

答案 2 :(得分:0)

工作答案:

size_t            i;

  i = sValue.find('.');  // find the point
  if (i < sValue.size())  // if there is one, then ...
    {
      i = sValue.size() - i - 1; // find the number of decimal
      oss << std::setprecision(i) << std::fixed << value;  // apply the precision
    }
  else // otherwise, it's neither a float neither a double
    oss << std::setprecision(0) << std::fixed << value; // no need of precision
  if (oss.str() != sValue)