Как проверить текст регистр c
Стандартная библиотека С++ также предоставляет ряд встроенных функций для работы с символами. В основном они связанны с проверкой символов:
- isupper(c) : проверяет, является ли c заглавной буквой, по умолчанию от «A» до «Z»
- islower(c) : проверяет, является ли c буквой нижнего регистра, по умолчанию от ‘a’ до ‘z’
- isalpha(c) : проверяет, является ли c алфавитным символом
- isdigit(c) : проверяет, является ли c цифрой от ‘0’ до ‘9’
- isxdigit(c) : проверяет, является ли c шестнадцатеричной цифрой, от ‘0’ до ‘9’, от ‘a’ до ‘f’ или от ‘A’ до ‘F’
- isalnum(c) : проверяет, является ли c алфавитно-цифровым символом; аналогично isisalpha(c) || isdigit(c)
- isspace(c) : проверяет, является ли c пробелом (‘ ‘), символом перевода строки (‘\n’), возвратом каретки (‘\r’), перевод страницы (‘\f’), горизонтальная (‘\t’) или вертикальная (‘\v’) табуляция
- isblank(c) : проверяет, является ли c пробелом (‘ ‘) или символом табуляция (‘\t’)
- ispunct(c) : проверяет, является ли c символом пунктуации (один из следующих: _ < >[ ] # ( ) < >% : ; ? * + — / ^ & | ~ ! » brush:cpp;»> #include int main() < unsigned char letter ; if (std::isupper(letter)) std::cout
Данные функции очень часто применяются при обработке строк. Рассмотрим прстейшую задачу — нам надо извлечь из некоторого текста (например, из строки «Phone number: +1(234)456-78-90» ) номер телефона:
#include #include int main() < std::string text ; std::string phone; // строка для хранения номера for(unsigned i<>; i < text.length(); i++) < // проверяем, является ли символ цифрой if(std::isdigit(text[i])) < // добавляем в строку номера телефона phone += text[i]; >> std::cout
Здесь проходим по всем символам текста и, если символ представляет цифру, то заносим его в строку phone. Другая задача — нам надо сравнить две строки вне зависимости от регистра. С одной стороны, мы могли бы использовать простую операцию сравнения ==, которая также может сравнивать строки. Но если мы попытаемся сравнить две строки, в которых хотя бы один символ отличается по регистру, то они будут не равны:
#include #include int main() < std::string word1 ; word1 = "hello"; std::string word2 ; if(word1 == word2) < std::cout else < std::cout >
Результат данной программы:
strings are not equal
Чтобы организовать сравнение без учета регистра, мы могли бы переводить символы в верхний или нижний регистр и сравнивать их:
#include #include int main() < std::string word1 ; std::string word2 ; bool is_equal; // равны ли строки if(word1.length() != word2.length()) < is_equal = false; >else < // сравниваем все символы for(unsigned i<>; i < word1.length(); i++) < // переводим символы в нижний регистр и сравниваем if(std::tolower(word1[i]) != std::tolower(word2[i])) < // если символы не равны, сбрасываем флаг равенства is_equal = false; break; // выходим из цикла >> > if(is_equal) < std::cout else < std::cout >
В данном случае сначала сравниваем длину строк, так как если длины не равны, то сами строки тоже не равны. Далее в цикле проходим по всем символам обоих строк, переводим их в нижний регистр и сравниваем. Если хотя бы одна пара соответствующих символов не равна, то сбрасываем флаг равенства is_equal в false и выходим из цикла, поскольку строки в этом случае будут уже не равны, и дальше нет смысла сравнивать символы. Результат данной программы:
HELLO and hello are equal
Проверка регистра русской буквы
Мне нужно проверить регистр русской буквы. Нашел вот такие функции: islower() и isupper()
Включил локализацию, но все равно выводит всегда нули.1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include #include using namespace std; int main(int argc, char **argv) { setlocale(LC_ALL, ""); string s = "Куку"; coutislower(s[2]); return 0; }Проверял каждый элемент строки
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:В новом файле заменить все латинские буквы верхнего регистра на буквы нижнего регистра
9. В новом файле заменить все латинские буквы верхнего регистра на буквы нижнего регистра. helpФункция преобразует буквы верхнего регистра в строке s в буквы нижнего регистра
Задание: strlwr char *strlwr( char *s); Функция преобразует буквы верхнего регистра в строке s.
Заменить все буквы нижнего регистра в строке на буквы верхнего регистра
Определить функцию, заменяющую все буквы нижнего регистра в строке на буквы верхнего регистра.Как получить ASCII русской буквы
Здравствуйте, подскажите как получить код ASCII русской буквы? К примеру std::cout <<.Проверка регистра букв
Здравствуйте, при создании программы возникла проблема:
Вводится любой текст, нужно определить количество заглавных букв. Как определить, заглавная ли буква?94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:Определение регистра букв
Здравствуйте, возникла маленькая проблемка. Для её решения нужно определить в каком регистре.
Замена регистра букв посимвольно
Вводится последовательность N символов. Вывести последовательность символов, заменяя каждую большую.Изменение регистра букв в файле
В файле test.in записан текст на английском языке. Как изменить регистр алфавитных символов.Проверка регистра русской буквы
Здравствуйте! Мне нужно проверить регистр русской буквы. Нашел вот такие функции: islower() и.7626 / 6438 / 2936
Регистрация: 14.04.2014
Сообщений: 28,076Добавлено через 1 минуту
Только для русских букв надо локализацию включить.Регистрация: 10.12.2013
Сообщений: 48а как весь текст проверить на наличие? Не по одной же букве проверять
Добавлено через 6 минут
просто у меня есть, допустим, такой код:1 2 3
char a[100] cout "Vvedite text" endl; cin >> a;
как к одной букве применить я понял, но к целому тексту.
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10Да напиши если буква лежит в диапазне
[‘A’,’Z’] || [‘А’..’Я’] то значит заглавная
7626 / 6438 / 2936
Регистрация: 14.04.2014
Сообщений: 28,076В цикле, разумеется. Каждый символ проверять.
Добавлено через 53 секунды
Qazan, это в C++ так можно делать?215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10Ты будешь пробегать по массиву
по буквенно1 2 3 4 5 6 7 8 9 10 11 12
a - Your Array n - Size of Your Array int count = 0; for(int i = 0;i n;i++) { if(('A' a[i] && a[i] 'Z') { count++; } } std::cout <" MyCount : "
; Добавлено через 35 секунд
nmcf, Я образно
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
Fantasmaforia,1 2 3 4 5 6 7 8 9 10 11
#include #include #include int main () { const std::string text = "Some text. With two uppercase letters."; size_t uppercase = std::count_if(text.cbegin(), text.cend(), [](const char& a){ return std::isupper(a); }); std::cout "Uppercase letters number: " uppercase ", lowercase letters number: " text.size() - uppercase std::endl; }1 2 3
ruslan@TFTM-K53TA:~/Programming/c++/cyberforum$ make && ./main clang++ main.cpp -o main -std=c++11 -W Uppercase letters number: 2, lowercase letters number: 36
Как определить регистр символа
Здравствуйте! Подскажите, как определить регистр символа. Именно определить, а не изменить. Есть ли какая-нибудь функция? Самый простой метод в лоб — это два массива с верхний и нижним регистром, после проверка на вхождение. Есть ли путь проще?
Отслеживать
371 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков
задан 10 дек 2013 в 16:44
chessinvin chessinvin
169 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков
Хорошо, что еще никто не догадался регулярное выражение использовать))
11 дек 2013 в 11:26
@lampa, к сожалению, нет: ru.stackoverflow.com/a/705517/207618
– user207618
13 авг 2017 в 12:037 ответов 7
Сортировка: Сброс на вариант по умолчанию
Например, так можно:
var symbol = 's'; var isUpperCase = symbol.toUpperCase()==symbol; alert(!!isUpperCase); // true - верхний регистр, false - нижнийОтслеживать
ответ дан 10 дек 2013 в 20:35
13.6k 13 13 золотых знаков 61 61 серебряный знак 122 122 бронзовых знака
Благодарю. Пожалуй, воспользуюсь Вашим вариантом!
11 дек 2013 в 15:56На ум пришло 2 идеи:
- Сравнивать диапазон ASCII кодов символов, если входит в диапазон — значит верхний регистр, иначе нижний. Сложность в том, что тут придется учитывать разные кодировки, или приводить символ\текст к нужной.
- Воспользоваться функцие приводящей к верхнему\нижнему регистру. Пример допустимый для PHP:
В JS у строки есть метод — toUpperCase().
Отслеживать
ответ дан 10 дек 2013 в 17:52
510 4 4 серебряных знака 10 10 бронзовых знаковПервый вариант, мне кажется, наиболее правильный. Только «иначе нижний» не совсем верно, может быть вовсе не буква. И быть внимательным, т.к. букву ё вечно все недолюбливают.
11 дек 2013 в 4:11
@pincher1519 чем плохо ? «ёлки палки. Что такое с этим ё».split(»).map(function(v,i) < if (v.toUpperCase()==v.toLowerCase()) return '#'; return v==v.toUpperCase()?"U":"l">);
11 дек 2013 в 4:31
@pincher1519, получится, что Щ — это строчная буква
11 дек 2013 в 5:28@pincher1519 > А разве нельзя сравнить, если ch >= ‘A’ и ch <= 'Z', то заглавная? сравните подобным образом utf8 строку и получите национальную индийскую премию по программированию. >само собой нужно это ещё сделать и для русского алфавита, и отдельно для буквы ё. зачем это все если есть .toUpperCase ?=>
11 дек 2013 в 10:05
@pincher1519 какая такая банальная проверка ? вы предлагаете 500 условий вставить на каждый язык, .toUpperCase() написана на си и учитывает правила перевода символа в utf8 для всех языков. Горе программист это вы — вместо того чтобы использовать стандартную функцию, городите велосипед. (а вы случайно не складываете числа ассемблерными вставками ?), кстати заметьте — я свои слова подтверждаю кодом, а вы даже не пробовали свою процедуру написать, ибо когда попробуете — увидите насколько ужасна она будет при банальном требовании совместимости английский, немецкий, русский.
11 дек 2013 в 10:50
На днях столкнулся с такой же задачей. Предлагаю свою идею. В ходе написание скрипта были учтены непереводимые в регистр символы, цифры, пробел. При определении ввода верхнего регистра проверяю последний введенный символ.
Ну в общем чего ходить вокруг да около вот функция которая принимает объект и уже на типу объекта берет значение для проверки.
/** * return boolean * true - using Caps Lock * false - not using Caps Lock **/ function checkingUp(_obj) < var symbol = ''; var type = _obj[0].tagName; switch(type) < case "INPUT" : symbol = String(_obj.val()); break; >if(symbol == '') < return false; >symbol = symbol.substr(symbol.length - 1, (symbol.length)); if($.isNumeric(symbol)) < return false; >var newSymbol = symbol.toLowerCase(); if(symbol != newSymbol) < return true; >return false; >Функция принимает String значение для проверки.
/** * return boolean * true - using Caps Lock * false - not using Caps Lock **/ function checkingUp(_obj) < var symbol = _obj; if(symbol == '')< return false; >symbol = symbol.substr(symbol.length - 1, (symbol.length)); if($.isNumeric(symbol)) < return false; >var newSymbol = symbol.toLowerCase(); if(symbol != newSymbol) < return true; >return false; >Функция может быть использована для проверки вводимого значения в поле Password, примерный код проверки с использованием вышеизложенной функции прилаживая ниже . . .
$("#login-form input[type=password]").each(function() < // после поля ввода пароля расположен span с логотипом капчи, скрытый стилями css var iconCapsLock = $(this).parent().find('.capslock'); $(this).bind('keyup', function()< if(checkingUp($(this)))< iconCapsLock.show(); >else < iconCapsLock.hide(); >>); $(this).bind('blur', function()< iconCapsLock.hide(); >); >);И под конец пример HTML верстки с полем для проверки
Надеюсь, что мой совет поможет нуждающимся ))
