[英]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是我的臨時字符串。
代碼中有兩個錯誤:
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
指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.