我正在尝试解决一个非常简单的编码问题:
考虑一个数字字符串数组,其中每个字符串都是一个正数,范围从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
首先,使用字符串向量而不是可变大小的字符串数组(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)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |