如何在c++中按字母顺序对标准输入字符串排序
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'(也称为'basic_string, allocator>')中分配'char *'Argv [j] = temp;^ ~ ~ ~ ~//temp是临时字符串。
代码中有两个错误:
- 正如@hyde指出的,
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
指针。
相关文章:
- 从标准输入读取文件后读取用户输入
- 如何从标准输入中检测格式化输入错误?
- C++ - 标准输入环路
- 快速读取标准输入缓冲区,无需检查
- 将标准输入中的双精度存储在矢量中
- 如何将 getline 与标准输入一起使用?
- 从 C++ 中的标准输入迭代读取字节
- C++计算标准输入的字数
- 如何从 c++ 中的给定标准输入中获取每个字符的偏移量?
- 为什么此代码从标准输入中少一个输入?
- 如何在C++中从标准输入中获取变量输入
- C++ 从标准输入读取文件名
- 从标准输入读取多个类型时出现问题
- 如何在execl中使用标准输入'<'?
- 如何在 eclipse 中将标准输入从控制台更改为另一个程序
- 流对象来表示文件输入,然后是标准输入?
- 标准输入输出操作如何C++完成
- 从标准输入读取时zmq_poll不侦听信号
- 是否可以从标准输入指向指针的地址
- 如何在c++中按字母顺序对标准输入字符串排序