【发布时间】:2021-09-05 22:12:10
【问题描述】:
#include <cinttypes>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
uint64_t descendingOrder(uint64_t a)
{
string str = to_string(a);
sort(str.begin(),str.end(),[](unsigned char a , unsigned char b) { return a>b;});
cout<<"sorted string:" <<str<<endl;
cout<<"value :"<<strtol(str.c_str(),nullptr,10)<<endl;
return strtol(str.c_str(),nullptr,10);
}
int main()
{
descendingOrder(9223372036854775807L);
}
sorted string:9887777655433322200
value :9223372036854775807
为什么sorted string: 和value: 不同?即使在排序之后,value: 似乎也以某种方式获取了原始字符串。错误在哪里?是UB吗?
代码:Online code
【问题讨论】:
-
使用
std::stoull(str)代替 unsigned long long。strtol(和 C++ 中的std::stol)用于 signed longs。 -
OT:使用
char而不是unsigned char,因为std::string使用char。