파일의 텍스트를 사전 순으로 정렬하고 싶지만 사전 편집 순서가 실제로 무엇인지 이해하는 데 문제가 있습니다.문자열의 사전 식 비교 [대소 문자 구별 없음]
문자열을 정렬하면 다른 문제가 발생합니다. 관계 연산자는 ASCII 값을 사용하므로 참일 때
betty < Diane
이 거짓이됩니다.
(12)가 어떻게 사전 식 순서가 설정 한 것입니까?
파일의 텍스트를 사전 순으로 정렬하고 싶지만 사전 편집 순서가 실제로 무엇인지 이해하는 데 문제가 있습니다.문자열의 사전 식 비교 [대소 문자 구별 없음]
문자열을 정렬하면 다른 문제가 발생합니다. 관계 연산자는 ASCII 값을 사용하므로 참일 때
betty < Diane
이 거짓이됩니다.
(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
흠 나를 위해 작동하지 않습니다 – 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을 사용하여 작업을 쉽게 수행하는 대신 학습하려는 경우 자신의 기수 정렬을 구현해보십시오. –