gpt4 book ai didi

c++ - 如何改进小数的自然排序程序?

转载 作者:行者123 更新时间:2023-11-30 03:12:03 25 4
gpt4 key购买 nike

我的 std::strings 的前导部分包含数字,我需要对其进行排序。数字可以是整数或 float 。

vector<std::string>排序不是最优的,我发现下面的自然排序程序要好得多。我仍然有一个小问题,即小于零的数字排序不正确。有人有改进的建议吗?我们使用的是 Visual Studio 2003。

完整的程序如下。

TIA,伯特

#include <list>
#include <string>
#include <iostream>

using namespace std;

class MyData
{
public:
string m_str;
MyData(string str) {
m_str = str;
}

long field1() const
{
int second = m_str.find_last_of("-");
int first = m_str.find_last_of("-", second-1);
return atol(m_str.substr(first+1, second-first-1).c_str());
}

long field2() const
{
return atol(m_str.substr(m_str.find_last_of("-")+1).c_str());
}

bool operator < (const MyData& rhs)
{
if (field1() < rhs.field1()) {
return true;
} else if (field1() > rhs.field1()) {
return false;
} else {
return field2() < rhs.field2();
}
}
};

int main()
{
// Create list
list<MyData> mylist;
mylist.push_front(MyData("93.33"));
mylist.push_front(MyData("0.18"));
mylist.push_front(MyData("485"));
mylist.push_front(MyData("7601"));
mylist.push_front(MyData("1001"));
mylist.push_front(MyData("0.26"));
mylist.push_front(MyData("0.26"));


// Sort the list
mylist.sort();

// Dump the list to check the result
for (list<MyData>::const_iterator elem = mylist.begin(); elem != mylist.end(); ++elem)
{
cout << (*elem).m_str << endl;
}

return 1;
}

明白了:

0.26
0.26
0.18
93.33
485
1001
7601

预期:

0.18
0.26
0.26
93.33
485
1001
7601

最佳答案

使用 atof() 而不是 atol() 使比较考虑到数字的小数部分。您还需要将返回类型更改为 double 。

关于c++ - 如何改进小数的自然排序程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1602732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com