我給出了兩個包含浮點數的字符串。我需要比較它們。我可以使用std::string::compare
直接比較字符串,並且這會始終給出正確的結果嗎?我目前的做法是使用std::stof
將字符串轉換爲浮點數,但是我寧願避免使用C++ 11庫函數。比較兩個包含浮點值的字符串
1
A
回答
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;
}
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
相關問題
- 1. 如何比較兩個包含小數值的字符串?
- 2. 比較兩個字符串的含義
- 3. 在末尾比較兩個包含數字的字符串
- 4. 比較兩個包含數字的python字符串
- 5. 比較兩個數字字符串值
- 6. 比較兩個字符串中的值
- 7. 比較兩個字符串(包含數字)
- 8. 比較兩個包含字符串的數組?
- 9. 如何比較JavaScript中包含字符串的兩個變量?
- 10. Python字符串/浮點比較
- 11. 比較包含浮點值的Python字典
- 12. 在Linq to Sql查詢中比較兩個包含多個點的字符串
- 13. 如何比較兩個不同的字符串(string1包含字符串2)
- 14. 比較兩個字符串值
- 15. 比較兩個字符串[]
- 16. 比較兩個字符串?
- 17. 比較兩個字符串
- 18. 比較兩個字典 - 浮點
- 19. 比較C#兩個字符串包含隨機URL
- 20. 比較兩個字符串,並在包含範圍
- 21. Android的字符串包含兩個值
- 22. 比較字符串,包含在PHP
- 23. 情結 「包含」 字符串比較
- 24. 如何比較包含相同字符的2個字符串
- 25. 如何比較包含撥號字符的兩個UTF-8字符串
- 26. 比較浮點值
- 27. 比較浮點值
- 28. 比較兩個字符串值並返回公共字符串
- 29. 比較節點值的字符串
- 30. 字符串含義比較
@NaCl什麼前導零?什麼是負值和正值零?科學記數法與固定記數法有什麼區別? – Columbo 2014-11-05 14:57:08
'stof'未在此範圍內聲明,因爲您尚未聲明您正在使用命名空間'std'。所以要麼在文件開頭聲明'using namespace std;',要麼使用'std :: stof'來代替。 – 2014-11-05 14:59:08
DBSystem.cpp:847:50:error:'stof'不是'std'的成員 'if(!condflag)flag = flag | (rec [x]> = std :: stof(breakCond [k] [2]));' – 2014-11-05 15:00:20