簡體   English   中英

如何在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'(aka'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 ,它似乎不適用於我的機器。

錯誤彈出因為它失敗了將類型stringchar * 但它必須顛倒過來(因此你的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM