Как привести строку к нижнему регистру c
Перейти к содержимому

Как привести строку к нижнему регистру c

  • автор:

Приведение строки к нижнему регистру

Это зависит от того, в какой кодировке строка. Например, строка задается строковым литералом const char *string = «Мама Милу била битой» в файле с исходным кодом. Если этот файл сохранен в utf-8, то и строка будет закодирована в utf-8, если файл в cp-1251, то и со строкой будет так же. Способы перевода в нижний регистр без использования стандартных библиотечных функций — разные.

– user239133
8 фев 2018 в 20:28

Для кодировки cp1251 посмотрите на таблицу кодов символов. Обратите внимание на одинаковое расстояние между символами в верхнем и нижнем регистре (за исключением ёЁ (впрочем, их давно пора запретить -))

Как привести строку к нижнему регистру в C++

В языке программирования C++ есть несколько способов привести строку к нижнему регистру. Рассмотрим некоторые из них.

Использование цикла

Один из самых простых способов — использовать цикл для перебора всех символов строки и применения функции tolower() к каждому символу. Вот пример кода:

#include #include std::string toLowerCase(std::string str) < for (int i = 0; i < str.length(); i++) < str[i] = std::tolower(str[i]); >return str; > int main()

В этом примере мы объявляем функцию toLowerCase(), которая принимает строку в качестве параметра и возвращает приведенную к нижнему регистру строку. Затем мы вызываем эту функцию в функции main() и выводим результат.

Использование библиотечной функции transform()

Другой способ — использовать функцию transform() из библиотеки algorithm. Эта функция применяет заданную функцию к каждому элементу диапазона и записывает результат в другой диапазон.

#include #include #include #include int main()

В этом примере мы используем функцию transform() для приведения строки к нижнему регистру. В качестве аргументов мы передаем итераторы, указывающие на начало и конец строки, и функцию ::tolower, которая будет применена к каждому элементу строки. Затем мы выводим результат.

Использование функции boost::algorithm::to_lower()

Если вы используете библиотеку Boost, вы можете воспользоваться функцией boost::algorithm::to_lower() для приведения строки к нижнему регистру.

#include #include int main()

В этом примере мы подключаем заголовочный файл boost/algorithm/string.hpp, который содержит функцию to_lower(). Затем мы вызываем эту функцию для приведения строки к нижнему регистру и выводим результат.

Использование функции std::locale

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

#include #include #include std::wstring toLowerCase(std::wstring str) < std::locale loc(""); for (std::wstring::size_type i = 0; i < str.length(); i++) < str[i] = std::tolower(str[i], loc); >return str; > int main()

В этом примере мы используем функцию std::locale для установки локали и функцию std::tolower() с учетом установленной локали для приведения строки к нижнему регистру. Мы также используем std::wstring и std::wcout для работы с символами юникода.

Заключение

В этой статье мы рассмотрели несколько способов привести строку к нижнему регистру в языке программирования C++. Вы можете выбрать любой из этих способов в зависимости от ваших потребностей и предпочтений.

Преобразование строки в нижний регистр

Есть функция tolower, которая переводит символы в нижний регистр. Можно применить ее ко всем символам строки:

#include #include #include #include int main()

Отслеживать
ответ дан 27 ноя 2011 в 14:13
11.7k 25 25 серебряных знаков 38 38 бронзовых знаков
Изящно и элегантно. Кстати, для С++ есть специальный рекомендованный хедер cctype
27 ноя 2011 в 14:20
@skegg поменял, спасибо!
17 мар 2019 в 20:38

Красиво, но вызывает UB на отрицательных кодах символов. Нужен std::transform(. [](unsigned char c)); .

18 мар 2019 в 16:11

Вроде такой функции нет, можно пройти по всем символам строки, и к ним применить tolower(). Или вместо tolower() использовать добавить вычесть:

char A; . //initialization A = A - 'A' + 'a'; // tolower; A = tolower(A); // tolower from ctype.h 

Отслеживать
ответ дан 27 ноя 2011 в 14:11
Sergii Kozlov Sergii Kozlov
2,468 16 16 серебряных знаков 13 13 бронзовых знаков
«Добавить вычесть» — не понял идею. Объясните, пожалуйста.
27 ноя 2011 в 14:16

добавить вычесть, основывается на ASCII кодах символов: если в A у нас содержится ‘B’, то отняв ‘A’ — получим 1, а потом прибавив ‘a’ получим ‘b’. Ну это вообще на крайняк, если забыл что где лежит. И в случае с другими раскладками (к примеру кириллица) возникнут проблемы, так как их коды идут не под ряд.

27 ноя 2011 в 14:19
А если лежит в чаре ‘a’, т.е. символ в нижнем регистре, то что в результате получится?
27 ноя 2011 в 14:21

Ну для этого я всегда выполняю проверку ‘A’
27 ноя 2011 в 14:23

Угу, без этого никуда. Но лучше использовать стандартную функцию, которая будет делать то же самое. Как минимум сэкономите время.

Преобразование строки в нижний регистр

Есть функция tolower, которая переводит символы в нижний регистр. Можно применить ее ко всем символам строки:

#include #include #include #include int main()

Отслеживать
ответ дан 27 ноя 2011 в 14:13
11.7k 25 25 серебряных знаков 38 38 бронзовых знаков
Изящно и элегантно. Кстати, для С++ есть специальный рекомендованный хедер cctype
27 ноя 2011 в 14:20
@skegg поменял, спасибо!
17 мар 2019 в 20:38

Красиво, но вызывает UB на отрицательных кодах символов. Нужен std::transform(. [](unsigned char c)); .

18 мар 2019 в 16:11

Вроде такой функции нет, можно пройти по всем символам строки, и к ним применить tolower(). Или вместо tolower() использовать добавить вычесть:

char A; . //initialization A = A - 'A' + 'a'; // tolower; A = tolower(A); // tolower from ctype.h 

Отслеживать
ответ дан 27 ноя 2011 в 14:11
Sergii Kozlov Sergii Kozlov
2,468 16 16 серебряных знаков 13 13 бронзовых знаков
«Добавить вычесть» — не понял идею. Объясните, пожалуйста.
27 ноя 2011 в 14:16

добавить вычесть, основывается на ASCII кодах символов: если в A у нас содержится ‘B’, то отняв ‘A’ — получим 1, а потом прибавив ‘a’ получим ‘b’. Ну это вообще на крайняк, если забыл что где лежит. И в случае с другими раскладками (к примеру кириллица) возникнут проблемы, так как их коды идут не под ряд.

27 ноя 2011 в 14:19
А если лежит в чаре ‘a’, т.е. символ в нижнем регистре, то что в результате получится?
27 ноя 2011 в 14:21

Ну для этого я всегда выполняю проверку ‘A’
27 ноя 2011 в 14:23

Угу, без этого никуда. Но лучше использовать стандартную функцию, которая будет делать то же самое. Как минимум сэкономите время.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *