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

Compare two strings containing float values

本文关键字:字符串 包含浮 两个 比较      更新时间:2023-10-16

我得到了两个字符串,其中包含一个浮点数。我需要对它们进行比较。我可以使用std::string::compare直接比较字符串吗?这总是会给出正确的结果吗?我目前的方法是使用std::stof将字符串转换为float,但我更喜欢避免使用C++11库函数。

在这样的情况下,简单地比较字符串对您没有帮助

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;
}

点击此处了解更多关于stof 的信息

写一些难看的代码怎么样?这可能不是一个好的做法,但。。。

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;
}