比较两个包含浮点值的字符串

时间:2014-11-05 14:52:45

标签: c++

我得到两个包含浮点数的字符串。我需要比较它们。我可以使用std::string::compare直接比较字符串吗?这样可以得到正确的结果吗?我目前的方法是使用std::stof将字符串转换为float,但我宁愿避免使用C ++ 11库函数。

2 个答案:

答案 0 :(得分:1)

简单地比较字符串对于像

这样的情况无济于事
a = "0.43"
b = "0.4300"

如果你需要比较首先将它们解析为float然后比较它们

std::string  s1  = "0.6"
std::wstring s2 = "0.7"
float d1  = std::stof(s1);
float d2 = std::stof(s2);

然后比较它们

这是一个完整的程序

#include <iostream>   // std::cout
#include <string>     // std::string, std::stof

int main ()
{
  std::string  s1  = "0.6"
  std::wstring s2 = "0.7"
  float d1  = std::stof(s1);
  float d2 = std::stof(s2);

  if(d1 == d2)
     std::cout << "Equals!";
  else
     std::cout << "Not Equals!";
  return 0;
}

click here for more reading on stof

答案 1 :(得分:0)

写一些丑陋的代码怎么样?这可能不是一个好习惯,但是......

int compare (const string &str1, const string &str2) {
    string *s1 = &str1, *s2 = &str2;
    int isReverse = 1;
    int len1, len2;

    if (str1.length() > str2.length()) {
        s1 = &str2;
        s2 = &str1;
        isReverse = -1;
    }

    len1 = s1->length();
    len2 = s2->length();

    if (!len1) {
        if (!len2))
            return 0;
        else if ((*s2)[0] != '-')
            return 1*isReverse;
        return -1*isReverse;
    }

    int i = 0;
    while(i < len1) {
        if ((*s1)[i] > (*s2)[i])
            return 1*isReverse;
        else if ((*s1)[i] < (*s2)[i])
            return -1*isReverse;
        i++;
    }

    while (i < len2) {
        if ((*s2)[i] != '0')
            return -1*isReverse;

        i++;
    }

    return 0;
}