为什么我的程序无法对整数字符串进行排序?

R d*_*ove 1 c++ sorting

我正在尝试解决一个非常简单的编码问题:

考虑一个数字字符串数组,其中每个字符串都是一个正数,范围从1到10 ^ 6位数。对数组元素按其整数值的降序或升序排序,然后在新行上打印排序后的数组的每个元素。

第一行包含一个整数n,该整数n表示字符串的数目。n行中的每一行都包含一个INTEGER STRING。

我的代码是:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int i; string s;
    cin >> i;
    int j = i;
    string arr[i];
    int cntr = 0;
    while (i--){
        cin >> s;
        arr[cntr] = s;
        cntr++;
    }
    sort(arr, arr+j);

    for (auto c: arr)
        cout << c << endl;

}
Run Code Online (Sandbox Code Playgroud)

输入是

6
31415926535897932384626433832795
1
3
10
3
5
Run Code Online (Sandbox Code Playgroud)

我的输出结果是:

1
10
3
3
31415926535897932384626433832795
5
Run Code Online (Sandbox Code Playgroud)

如果我创建一个数组并手动向其添加整数字符串,则上述代码可以正常工作。那么,为什么从网站输入信息却会产生错误的结果呢?

PS:这是问题的链接:https : //www.hackerrank.com/challenges/big-sorting/problem

luc*_*eon 5

首先,使用字符串向量而不是可变大小的字符串数组(C ++不允许)。

默认情况下,STL排序功能使用字典搜索对字符串进行排序。您需要传递自己的比较函数才能对整数字符串进行数字排序。

假设整数字符串不带前导0。

sort(arr.begin(), arr.end(), [] (const string& s1, const string& s2) {
    return s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2);
});
Run Code Online (Sandbox Code Playgroud)