Char. To Upper Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразует значение символа Юникода в эквивалентный символ верхнего регистра.
Перегрузки
Преобразует значение указанного символа Юникода в его эквивалент в верхнем регистре, используя указанные сведения о форматировании, связанные с языком и региональными параметрами.
Преобразует значение символа Юникода в эквивалентный символ верхнего регистра.
ToUpper(Char, CultureInfo)
Преобразует значение указанного символа Юникода в его эквивалент в верхнем регистре, используя указанные сведения о форматировании, связанные с языком и региональными параметрами.
public: static char ToUpper(char c, System::Globalization::CultureInfo ^ culture);
public static char ToUpper (char c, System.Globalization.CultureInfo culture);
static member ToUpper : char * System.Globalization.CultureInfo -> char
Public Shared Function ToUpper (c As Char, culture As CultureInfo) As Char
Параметры
Знак Юникода, который необходимо преобразовать.
Объект, задающий правила определения регистра для языка и региональных параметров.
Возвращаемое значение
Эквивалент c в верхнем регистре, измененный согласно culture , или значение c без изменений, если c уже является буквой верхнего регистра, не имеет эквивалента в верхнем регистре или не является буквой алфавита.
Исключения
culture имеет значение null .
Примеры
В следующем примере каждый символ в массиве преобразуется в его эквивалент в верхнем регистре для языка и региональных параметров en-US, инвариантный язык и региональные параметры tr-TR. В этом примере прописные буквы в верхнем регистре одинаковы для всех языков и региональных параметров, за исключением одного варианта. Символ «i» в нижнем регистре (U + 0069) преобразуется в «I» (U + 0049) в EN-US и инвариантные языки и региональные параметры, а в «i» (U + 0130) в культуре tr-TR.
using System; using System.Globalization; public class Example < public static void Main() < CultureInfo[] cultures= < CultureInfo.CreateSpecificCulture("en-US"), CultureInfo.InvariantCulture, CultureInfo.CreateSpecificCulture("tr-TR") >; Char[] chars = ; Console.WriteLine("Character en-US Invariant tr-TR"); foreach (var ch in chars) < Console.Write(" ", ch); foreach (var culture in cultures) Console.Write("", Char.ToUpper(ch, culture)); Console.WriteLine(); > > > // The example displays the following output: // Character en-US Invariant tr-TR // ä Ä Ä Ä // e E E E // E E E E // i I I İ // I I I I
open System open System.Globalization let cultures= [ CultureInfo.CreateSpecificCulture "en-US" CultureInfo.InvariantCulture CultureInfo.CreateSpecificCulture "tr-TR" ] let chars = [| 'ä'; 'e'; 'E'; 'i'; 'I' |] printfn "Character en-US Invariant tr-TR" for ch in chars do printf $" " for culture in cultures do printf $"" printfn "" // The example displays the following output: // Character en-US Invariant tr-TR // ä Ä Ä Ä // e E E E // E E E E // i I I İ // I I I I
Imports System.Globalization Module Example Public Sub Main() Dim cultures() As CultureInfo = < CultureInfo.CreateSpecificCulture("en-US"), CultureInfo.InvariantCulture, CultureInfo.CreateSpecificCulture("tr-TR") >Dim chars() As Char = Console.WriteLine("Character en-US Invariant tr-TR") For Each ch In chars Console.Write(" ", ch) For Each culture In cultures Console.Write("", Char.ToUpper(ch, culture)) Next Console.WriteLine() Next End Sub End Module ' The example displays the following output: ' Character en-US Invariant tr-TR ' ä Ä Ä Ä ' e E E E ' E E E E ' i I I İ ' I I I I
Комментарии
Используйте String.ToUpper для преобразования строки в верхний регистр.
См. также раздел
- ToUpper(Rune, CultureInfo)
- ToLower(Rune, CultureInfo)
- CurrentCulture
- ToUpper()
- ToLower(Char, CultureInfo)
Перевод букв русского алфавита в верхний регистр
Задача — перевод букв русского алфавита в верхний регистр. Однако при вводе любой строки, к примеру «привет», на выходе получаю яЁштхЄ . В чём проблема?
Отслеживать
задан 28 ноя 2017 в 17:41
Sergei Mikhailovskii Sergei Mikhailovskii
509 2 2 золотых знака 6 6 серебряных знаков 20 20 бронзовых знаков
А если #include
28 ноя 2017 в 17:44
nick_gabpe, все равно нет
28 ноя 2017 в 17:56
А какая у вас кодировкам консоли? Выведите строку до преобразования.
28 ноя 2017 в 19:19
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Во-первых цикл ничего не делает.
В VC++ по умолчанию char имеет максимальное значение 127, и условие string[i] > 192 всегда ложно.
Используйте unsigned char, например
for (int i = 0; string[i]!='\0'; i++) < unsigned char c = string[i]; if (c >192 && c < 255) < string[i] = toupper(c); >>
(Также в toupper нельзя передавать отрицательные значения.)
А во-вторых яЁштхЄ это вывод исходной строки привет .
Добавьте SetConsoleOutputCP(1251); .
Подробнее тут — Русский язык в консоли
Преобразование в верхний и нижний регистр в C++
Класс C++ String предоставляет огромное количество встроенных функций для выполнения операций над входной строкой.
В этом руководстве мы углубимся в преобразование входной строки в нижний и верхний регистр в C++.
Преобразование строки в верхний регистр
Язык C++ String имеет встроенную функцию toupper() для преобразования входной строки в верхний регистр.
Ее синтаксис выглядит так:
toupper(input_string)
Взгляните на следующий пример:
#include #include using namespace std; int main()
В приведенном выше фрагменте кода пакет cstring содержит функции, связанные со строками. Кроме того, там есть функция strlen(), которая используется для вычисления длины входной строки.
Метод putchar() необходим для отображения данных на экране/консоли.
Вывод будет выглядеть так:
Original String: Engineering Discipline. String in UPPERCASE: ENGINEERING DISCIPLINE.
Преобразование вводимого символа в верхний регистр
Преобразовать символы/строки в верхний/нижний регистр можно даже с учетом значений ASCII входных символов.
- Значения ASCII для строчных букв (a-z): 97–122
- Для букв верхнего регистра (A-Z): 65–92
Посмотрим на следующий пример:
#include using namespace std; int main() < char X; cout>X; X=X-32; cout
Как видите, разница между ASCII-значениями для строчных и прописных букв составляет 32 (если от 97 отнять 6).
Следовательно, чтобы преобразовать входные данные в верхний регистр, нам нужно вычесть 32 из значения ASCII вводимого символа.
Enter a character:f Converted character to UPPERCASE:F
Преобразование строки в нижний регистр
Класс C++ String имеет встроенную функцию tolower() для преобразования входной строки в нижний регистр.
Ее синтаксис выглядит так:
tolower(input)
К примеру, такой код:
#include #include using namespace std; int main()
Вернет такой результат:
Original String: Engineering Discipline. String in lowercase: engineering discipline.
Преобразование вводимого символа в нижний регистр
Посмотрите на этот пример:
#include using namespace std; int main() < char X; cout>X; X=X+32; cout
Как вы уже знаете, разница между значениями верхнего и нижнего регистра составляет 32. Соответственно, нам нужно добавить 32 к значению ASCII входного символа, чтобы преобразовать его в нижний регистр.
Enter a character:R Converted character to lowercase:r
Итоги
В этой статье мы рассмотрели преобразование символов и строк в нижний и верхний регистр в C++. В отношении методов ASCII важно отметить следующее: они просто преобразуют введенные символы в ASCII, а затем обратно. Если строка будет содержать числа, а не только буквы, вы получите неожиданный вывод.
Чтобы избежать подобных ошибок, вы можете либо обработать входные данные и убедиться, что введенные значения на самом деле являются символами, либо просто использовать функции toupper() и tolower().
Читайте также:
- Документация функции Uppercase
- Документация функции LowerCase
- Сравнение строк в C++: три основных метода
Язык Си в примерах/Верхний регистр
Дано текст — последовательность кодов ASCII — на стандартном вводе программы. Последовательность конечна, но ее длина заранее неизвестна. Надо вывести на стандартный вывод исходный текст, заменив в нем строчные буквы латиницы (a, …, z) прописными (A, …, Z). Указание воспользоваться особенностью кодовой таблицы ASCII: коды прописных букв отличаются от кодов соответствующих строчных на постоянную величину (а именно: 32.) Дополнительно предполагая поддержку средой русскоязычной локали, реализуйте аналогичное преобразование для кириллических текстов (используя стандартные функции языка.)
Решение [ править ]
В следующей программе введенный пользователем текст на латинице переводится в верхний регистр, то есть строчные буквы становятся заглавными. Все прочие коды — включая заглавные буквы и символы, не являющиеся латинскими буквами — не меняются.
Обратите внимание на то, что с символами (переменными типа char ) можно оперировать как с числами. В частности, ‘Z’ — ‘A’ есть число, равное разности кодов символов A и Z , то есть (при использовании кодовой таблицы ASCII) 25 — число букв в латинском алфавите минус 1. Символы можно также сравнивать друг с другом, при этом сравниваются их коды.
#include #include int main () int c; while ((c = getchar ()) != EOF) if ('a' c && c 'z') c += 'A' - 'a'; > putchar (c); > assert (! ferror (stdin)); return 0; >
Главный цикл (и условие корректности ввода) этой программы почти полностью совпадают с рассмотренными в разделе ASCII коды символов. Однако, вместо использования printf для вывода значений считанных кодов, здесь мы используем функцию putchar для вывода самих кодов (знаков), возможно — после преобразования. [1] В коде по-прежнему используются функции getchar и ferror . [2] [3]
Обратите внимание, что сформировать условие «конец потока» при вводе с клавиатуры можно вводом (в зависимости от системы и предполагая настройки по-умолчанию) Control-d или Control-z (также обозначаются C-d , ^D , C-z , ^Z .)
Использование стандартной библиотеки [ править ]
Приведенный выше код можно еще более упростить, если воспользоваться стандартной функцией преобразования регистра toupper , объявленной в заголовке ctype.h . [4]
Некоторые реализации языка, кроме того, определяют функции strlwr и strupr , которые переводят в нижний и верхний регистр строки, а не отдельные символы. Эти функции, однако, не являются стандартными и их наличие (или отсутствие) зависит от выбранной реализации языка.
#include #include #include int main () int c; while ((c = getchar ()) != EOF) putchar (toupper (c)); > assert (! ferror (stdin)); return 0; >
Кроме латиницы [ править ]
Стандарт предусматривает также ряд средств для поддержки письменностей, отличных от «базовой» (26-символьной) латиницы. В основе такой поддержки — два следующих понятия:
- локаль — набор сведений о письменности, языке и культуре, включающий, помимо прочего, таблицы соответствия символов верхнего и нижнего регистров;
- широкие символьные типы ( wchar_t , wint_t ; англ. wide character ) — для представления ряда письменностей (например — основанных на иероглифах), а равно для представления текстов на нескольких языках, «байтового» типа char оказывается недостаточно; как следствие, в задачах, связанных с обработкой многоязычных текстов, его заменяет тип wchar_t ; аналогично, в операциях ввода-вывода используется тип wint_t (и константа WEOF .)
Соответственно, в исходный вариант вносятся следующие изменения.
- Появляется вызов setlocale ( LC_ALL , «» ) , инициализирующий локаль в соответствии с текущими настройками. (По-умолчанию, при запуске программы полагается setlocale ( LC_ALL , «C» ) — установка «стандартной» локали.) [5]
- Функции getwchar , towupper , putwchar заменяют соответствующие для «узких» символов ( getchar , toupper , putchar .) Соответственно меняются тип ( int → wint_t ) и константа признака исчерпания входного потока ( EOF → WEOF .) [6][7][8]
- Включаются соответствующие заголовки ( locale.h , wchar.h , wctype.h .)
#include #include #include #include #include int main () char *rl = setlocale (LC_ALL, ""); assert (rl != 0); wint_t c; while ((c = getwchar ()) != WEOF) putwchar (towupper (c)); > assert (! ferror (stdin)); return 0; >
Отметим, впрочем, что принятые в конкретном языке правила обращения со строчными и заглавными могут оказаться сложнее простой зависимости символ—символ, предполагаемой в данном примере. Так, например, правила немецкого языка ставят в соответствие строчной «ß» пару заглавных — «SS» (например: Straße → STRASSE ), что ни коим образом не может быть реализовано функцией towupper .
Задания [ править ]
- Проверьте работу программы вводом строк Hello! и Привет! . Удостоверьтесь, что «базовые» варианты решения выполняют заданное преобразование лишь для первой из них, в то время как «интернационализованное» решение действует и в отношении кириллического ввода.
- Разработайте варианты программы, выполняющие (вновь для латиницы) a. преобразование верхнего регистра в нижний и b. «переключение» регистра — Hello! → hELLO! . (Указание: воспользуйтесь стандартными функциями islower и isupper . [9][10] )
См. также [ править ]
Примечания [ править ]
- ↑7.21.7.8 The putchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.21.7.6 The getchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.21.10.3 The ferror function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.4.2 Character case mapping functions (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.11.1.1 The setlocale function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.29.3.7 The getwchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.30.3.1.2 The towupper function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.29.3.9 The putwchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.4.1.7 The islower function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.4.1.11 The isupper function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- Страницы с устаревшим атрибутом подсветки синтаксиса «enclose»
- Язык Си в примерах