【发布时间】:2021-02-06 10:54:14
【问题描述】:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
bool comp(int a, int b){
return a < b;
}
int main(int argc, char* argv[]){
char array[argc-1];
for(int i = 1; i < argc; i++){
array[i-1] = *argv[i];
}
for(int j = 0; j < argc; j++){
cout<<array[j]<<" ";
}
std::sort(array, array+argc-1, comp);
for(int j = 0; j < argc; j++){
cout<<array[j]<<" ";
}
cout<<endl;
return 0;
}
此代码应该对命令行的参数进行排序。但是当我启动它时:
.\a.exe 11 21 34 9 87
我得到这个输出:
1 2 3 8 9
【问题讨论】:
-
您只复制每个参数的第一个字符。
-
是的,你得到这个输出是因为你的程序就是这么做的。它仅对每个参数的第一个字符进行排序。这就是你的程序所做的。如果你想让它做其他事情,你需要相应地改变你的程序。您的比较函数仅比较两个
int值对您有意义吗?当实际比较只比较两个int值时,您希望如何对字符串进行排序?您可以从拼图的这一部分开始,然后从那里开始。 -
也许this 有帮助
-
array是char的数组,但您的比较函数比较两个int值。 -
可变长度数组不符合 C++ 标准,你应该使用
std::vector
标签: c++ sorting command-line-arguments