[英]How to sort standard input strings alphabetically in C++?
#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:错误:从不兼容的类型'string'(aka'basic_string,allocator>')中分配'char *'argv [j] = temp; ^ ~~~~ // temp是我的临时字符串。
代码中有两个错误:
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
,它似乎不适用于我的机器。
错误弹出因为它失败了将类型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
指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.