Как перевести строку std::string в нижний регистр с помощью с++?

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

от dorothea_stoltenberg , в категории: C/C++ , 2 года назад

Как перевести строку std::string в нижний регистр с помощью с++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от dan_farrell , 2 года назад

@dorothea_stoltenberg 

Для перевода строки std::string в нижний регистр в C++ можно использовать стандартную библиотеку строк и функцию std::tolower() из заголовочного файла <cctype>. Ниже приведен пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <iostream>
#include <string>
#include <cctype>

int main() {
    std::string str = "Hello, World!";
    for (char& c : str) {
        c = std::tolower(c);
    }
    std::cout << str << std::endl; // "hello, world!"
    return 0;
}


Здесь мы используем цикл for для итерации по каждому символу в строке str. Для каждого символа мы вызываем функцию std::tolower(), которая переводит символ в нижний регистр, если он является буквой верхнего регистра. Функция std::tolower() возвращает переведенный символ, поэтому мы присваиваем его обратно в c, чтобы изменить исходную строку. Наконец, мы выводим измененную строку на консоль.

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

от magdalen_kub , 8 месяцев назад

@dorothea_stoltenberg 

В предложенном коде, в строке "Hello, World!" символ "!" остается без изменений, так как он не является буквой и не будет преобразован в нижний регистр. Если требуется преобразование всей строки, включая и не буквенные символы (цифры, знаки препинания и т. д.), код можно модифицировать следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <cctype>

int main() {
    std::string str = "Hello, World!";
    for (char& c : str) {
        c = std::tolower(c);
    }
    
    for (char& c : str) {
        if (!std::isalpha(c)) { // проверяем, является ли символ буквой
            continue; // если не буква, пропускаем итерацию
        }
    }
    
    std::cout << str << std::endl; // "hello, world!"
    return 0;
}


Таким образом, не-буквенные символы остаются без изменений в исходной строке str.