ファイルのテキストを辞書順に並べ替えたいが、辞書順が本当に何をするのか理解できない。文字列の辞書順比較[大文字と小文字を区別しない]
文字列を注文すると別の問題が発生します。関係演算子はASCII値を使用するので、真でなければならないときは、
betty < Diane
はfalseです。私は辞書式順序でそれを設定する方法を ベティ、ダイアン、123、アナ、ミーガン、チャールズ、2、12
:
は、サンプルリストを考えてみましょうか?
ファイルのテキストを辞書順に並べ替えたいが、辞書順が本当に何をするのか理解できない。文字列の辞書順比較[大文字と小文字を区別しない]
文字列を注文すると別の問題が発生します。関係演算子はASCII値を使用するので、真でなければならないときは、
betty < Diane
はfalseです。私は辞書式順序でそれを設定する方法を ベティ、ダイアン、123、アナ、ミーガン、チャールズ、2、12
:
は、サンプルリストを考えてみましょうか?
これはあなたが望むことをしませんか?
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cctype>
int main() {
std::vector<std::string> v {"Diane", "123", "Ana", "Megan", "charles", "two", "12"};
for (const auto& s : v) {
std::cout << s << ' ';
};
std::cout << '\n';
std::sort(v.begin(), v.end(), [](const std::string& a, const std::string& b) {
for (int i = 0 ; i < std::min(a.size(), b.size()) ; i++) {
const auto a_char = std::tolower(a[i]);
const auto b_char = std::tolower(b[i]);
if (a_char != b_char) {
return a_char < b_char;
}
}
return a.size() < b.size();
});
for (const auto& s : v) {
std::cout << s << ' ';
};
std::cout << '\n';
return 0;
}
標準出力は次のようになります。
Diane 123 Ana Megan charles two 12
12 123 Ana charles Diane Megan two
Hmmは私のためにうまくいきません – FastKid12
これは間違っています。大文字小文字を区別しない検索ではありません。完全な質問を読む。 –
アプローチ:
map <convert_to_lower_case(words) as string, index as integer>
を使用してください。その後使用してソートされたベクトルmyVec
を作成します。
for(it_type iterator = m.begin(); iterator != m.end(); iterator++) { myVec.push_back(original_list[it->second]); }
myVec
は、あなたが探している辞書順ソートされたリストです。 あなたはconvert_to_lower_case(word)
を実装する必要があります。
for(int i = 0; str[i]; i++){
word[i] = tolower(str[i]);
}
その他の答えはあまりにも良いですが、ベクトルをソートするためのコンパレータを使用しています。
['std :: string'](http://en.cppreference.com/w/cpp/string/basic_string)は既に辞書編集比較を使用しています。 –
それはどういう意味ですか? @ someprogrammerdude – FastKid12
STLを使用して作業を簡単にする代わりに、学習する場合は、独自の基数ソートを実装してみてください。 –