c++ - 如何在 C++ 中按字母顺序对标准输入字符串进行排序?

标签 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: error: assigning to 'char *' from incompatible type 'string' (aka'basic_string, allocator >') argv[j] = temp; ^ ~~~~ //temp is my temporary string.

最佳答案

代码中有两个错误:

  1. 正如@hyde 指出的那样,temp应该是 char*而不是 string
  2. argv[i] > argv[j]看起来像指针比较,即它会比较地址的值而不是比较字符串。我建议使用 strcmp比较两个的方法char* (然后你需要#include <string>才能使用这个方法)

建议的代码(不确定是否完全没有错误,但希望是这样):

#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它似乎在我的机器上不起作用。

关于c++ - 如何在 C++ 中按字母顺序对标准输入字符串进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39324279/

相关文章:

c++ - 缺少 Visual Studio 2012;

c++ - 当窗口/屏幕上发生任何变化时的 Qt 事件 + 屏幕截图

C++ 对一个定义规则的混淆

c++ - 如何使用 placement new 重新初始化字段?

c++ - 插入函数不断重新创建根节点

c++ - 如何在 C++ 中初始化对象的空数组?

C++ 内联转换和转换为变量的工作方式不同

c++ - 为什么我的double变量通过添加c++来显示nan?

C++:将 vector 传输到子程序中

C++链表错误: Access violation error