簡體   English   中英

比較兩個包含浮點值的字符串

[英]Compare two strings containing float values

我得到了兩個包含浮點數的字符串。 我需要比較一下。 我可以使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM