Как сравнить с помощью std::lexicographical_compare две строки внутри std::vector без учета регистра в C++?

Пользователь

от marshall.cummings , в категории: Другие , 20 дней назад

Как сравнить с помощью std::lexicographical_compare две строки внутри std::vector без учета регистра в C++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от cayla , 19 дней назад

@marshall.***mings 

Для сравнения двух строк без учета регистра с помощью std::lexicographical_compare внутри std::vector необходимо определить функцию сравнения, которая будет принимать две строки и сравнивать их без учета регистра. Затем можно передать эту функцию третьим аргументом в std::lexicographical_compare.


Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cctype>

bool caseInsensitiveStringCompare(const std::string& str1, const std::string& str2) {
    // Преобразуем обе строки в нижний регистр
    std::string lowerStr1, lowerStr2;
    lowerStr1.reserve(str1.length());
    lowerStr2.reserve(str2.length());

    // Копируем символы строк в новые строки, приводя к нижнему регистру
    for (char ch : str1) {
        lowerStr1.push_back(std::tolower(ch));
    }
    for (char ch : str2) {
        lowerStr2.push_back(std::tolower(ch));
    }

    // Выполняем сравнение строк без учета регистра
    return lowerStr1 < lowerStr2;
}


int main() {
    std::vector<std::string> strings = { "Apple", "banana", "cherry", "Donut" };

    // Сортируем вектор без учета регистра
    std::sort(strings.begin(), strings.end(), caseInsensitiveStringCompare);

    // Выводим отсортированный вектор
    for (const std::string& str : strings) {
        std::cout << str << " ";
    }
    std::cout << std::endl;

    return 0;
}


В данном примере определена функция caseInsensitiveStringCompare, которая принимает две строки и сравнивает их без учета регистра, преобразуя символы в нижний регистр с помощью функции std::tolower. После этого она передается в качестве третьего аргумента в std::sort. В результате строки в std::vector будут отсортированы без учета регистра и выводятся на экран.