C++ 如何在C+中按字母顺序对标准输入字符串进行排序+;? #包括 使用名称空间std; int main(int argc,字符**argv) { int i=0,j=0; 字符串温度; 对于(i=1;i)分配给“char*”) argv[j]=温度; ^ ~~~~ //temp是我的临时字符串

C++ 如何在C+中按字母顺序对标准输入字符串进行排序+;? #包括 使用名称空间std; int main(int argc,字符**argv) { int i=0,j=0; 字符串温度; 对于(i=1;i)分配给“char*”) argv[j]=温度; ^ ~~~~ //temp是我的临时字符串,c++,C++,我不知道为什么,但我在编译它时遇到了这个错误 trial2.cpp:109:14:错误:从不兼容的类型“string”(也称为“basic_string,allocator>)分配给“char*”) argv[j]=温度; ^ ~~~~ //temp是我的临时字符串 代码中有两个错误: 正如@hyde指出的,temp应该是char*而不是string argv[i]>argv[j]看起来像指针比较,即它将比较地址的值,而不是比较字符串。我建议使用strcmp方法来比较两个char*(然后您需要#

我不知道为什么,但我在编译它时遇到了这个错误

trial2.cpp:109:14:错误:从不兼容的类型“string”(也称为“basic_string,allocator>)分配给“char*”) argv[j]=温度; ^ ~~~~ //temp是我的临时字符串


代码中有两个错误:

  • 正如@hyde指出的,
    temp
    应该是
    char*
    而不是
    string
  • argv[i]>argv[j]
    看起来像指针比较,即它将比较地址的值,而不是比较字符串。我建议使用
    strcmp
    方法来比较两个
    char*
    (然后您需要
    #包括
    来使用此方法)
  • 建议的代码(不确定是否完全没有bug,但希望如此):

    #包括
    #包括
    使用名称空间std;
    int main(int argc,字符**argv)
    {
    int i=0,j=0;
    字符*温度;
    对于(i=1;i0)
    {
    温度=argv[i];
    argv[i]=argv[j];
    argv[j]=温度;
    }
    }
    }
    对于(i=0;icout由于无法将type
    string
    转换为
    char*
    ,因此会出现错误。但它必须反向工作(因此您的
    temp=argv[i];
    不会失败)。 不要写信给argv(你可以,但我不推荐)。 简单方法:在排序之前,将
    argv
    复制到
    字符串的某个数组中:
    `

    string*argv_strings=新字符串[argc-1];
    对于(int i=0;i
    `

    并使用
    argv_字符串
    代替
    argv

    不要忘记<代码>删除<代码>指针。

    不可能在不违反C++标准的情况下执行此操作。,您需要创建自己的指针向量和排序that@PcAF...Error不是因为字符串头。这是因为
    string
    不能隐式转换为
    char*
    。我们必须使用
    string::c_str()
    函数。另外,有没有具体的原因来做这样的冒泡排序,而不仅仅是在字符串列表上调用“sort”呢?比如:@sgarizvi哦,我把单词
    不兼容的
    读成
    不完整的
    ,我会删除我的注释。把
    字符串临时;
    改成
    字符*临时;
    ,这可能会对你的pa起作用Articular compiler/toolchain/OS。然后了解C风格字符串和
    std::string
    之间的区别。当然,必须注意的是,C++更好、更强大解决方法是首先将C字符串从
    argv
    复制到
    std::vector
    ,然后对其进行排序。uhh这是真的。谢谢提示:P@hyde谢谢你们,我使用字符串向量存储所有argv,然后对它们进行排序。
    #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;
                  }
              }
         }
    }
    
    #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;
        }
    } 
    
    string *argv_strings = new string[argc - 1];
    for(int i = 0; i < argc - 1; ++i)
    {
        argv_strings[i] = new string(argv[i + 1]);
    }