如何在c++中按字母顺序对标准输入字符串排序

How to sort standard input strings alphabetically in C++?

本文关键字:顺序 标准输入 字符串 排序 c++      更新时间:2023-10-16
#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是临时字符串。

代码中有两个错误:

  1. 正如@hyde指出的,temp应该是char*而不是string
  2. 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指针。