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