#include <iostream>
using namespace std;
int main (int argc, char **argv)
{
int i = 0, j = 0;
string temp;
for (i = 1; i < argc; ++i)
{
for (j = i+1; j < argc; ++j)
{
if (argv[i] > argv[j])
{
temp = argv[i];
argv[i] = argv[j];
argv[j] = temp;
}
}
}
}
我不知道为什么,但是当我编译它时我得到了这个错误。
trial2.cpp:109:14:错误:分配给&#39; char *&#39;来自不兼容的类型&#39;字符串&#39; (又名&#39; basic_string,allocator&gt;&#39;) argv [j] = temp; ^ ~~~~ // temp是我的临时字符串。
答案 0 :(得分:3)
代码中有两个错误:
temp
应该是char*
而不是string
argv[i] > argv[j]
看起来像指针比较,即它将比较地址的值而不是比较字符串。我建议使用strcmp
方法比较两个char*
(然后您需要#include <string>
才能使用此方法)建议的代码(不确定是否完全没有bug,但希望它是这样的):
#include <iostream>
#include <string>
using namespace std;
int main (int argc, char **argv)
{
int i = 0, j = 0;
char* temp;
for (i = 1; i < argc; ++i)
{
for (j = i+1; j < argc; ++j)
{
if (strcmp(argv[i] , argv[j]) > 0)
{
temp = argv[i];
argv[i] = argv[j];
argv[j] = temp;
}
}
}
for(i = 0; i < argc; i++){
cout << argv[i]<< endl;
}
}
注意最后的for循环是检查输出是否已排序。我尝试了您的比较argv[i] > argv[j]
而不是strcmp
,但它似乎无法在我的机器上运行。
答案 1 :(得分:1)
错误弹出因为它将string
类型转换为char *
失败。但它必须颠倒过来(因此你的temp = argv[i];
不会失败)。
不要写信argv
(你可以,但我不建议)。
简单方法:在排序之前将argv
复制到某个string
数组:
`
string *argv_strings = new string[argc - 1];
for(int i = 0; i < argc - 1; ++i)
{
argv_strings[i] = new string(argv[i + 1]);
}
`
并使用argv_strings
代替argv
不要忘记delete
指针。