2014-11-05 51 views
1

我給出了兩個包含浮點數的字符串。我需要比較它們。我可以使用std::string::compare直接比較字符串,並且這會始終給出正確的結果嗎?我目前的做法是使用std::stof將字符串轉換爲浮點數,但是我寧願避免使用C++ 11庫函數。比較兩個包含浮點值的字符串

+0

@NaCl什麼前導零?什麼是負值和正值零?科學記數法與固定記數法有什麼區別? – Columbo 2014-11-05 14:57:08

+0

'stof'未在此範圍內聲明,因爲您尚未聲明您正在使用命名空間'std'。所以要麼在文件開頭聲明'using namespace std;',要麼使用'std :: stof'來代替。 – 2014-11-05 14:59:08

+0

DBSystem.cpp:847:50:error:'stof'不是'std'的成員 'if(!condflag)flag = flag | (rec [x]> = std :: stof(breakCond [k] [2]));' – 2014-11-05 15:00:20

回答

1

簡單地比較字符串不會幫助你在情況下,像

a = "0.43" 
b = "0.4300" 

,如果你需要比較第一個把它解析爲浮動,然後比較它們

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

+0

@Columbo gimmi 1分鐘 – 2014-11-05 14:57:50

+1

浮點數不應該用'=='進行比較,因爲它們固有地不精確。你應該相反,檢查數字之間的差異是否在一些小的範圍內。 – Snps 2014-11-05 15:07:36

+0

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html#1015 – Snps 2014-11-05 15:14:29

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

聖鬥士你在做什麼?! – 2014-11-05 18:13:20