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

Как перевести символ в верхний регистр с

  • автор:

Перевод в верхний регистр

Напишите программу, которая позволяет пользователю ввести в консоли латинскую букву нижнего регистра, переводит её в верхний регистр и результат выводит в консоль. Смотрим пример работы программы, которая находится во вкладке — «Решение», постарайтесь сами решить эту задачу, не подглядывая на уже готовое решение. Ну а если совсем ничего не будет получаться, тогда смело открывайте готовый исходник.

Ниже показано решение данной задачи. Исходный код очень простой, если что-то не понятно, задавайте вопросы в комментариях.

#include #include int main() < char chLetter('a'); setlocale(LC_ALL,"Russian"); std::cout > chLetter; chLetter = chLetter — 32; std::cout

Смотрим результат работы программы:

CppStudio.com

Введите букву нижнего регистра:

Та же буква в верхнем регистре: F.

Язык Си в примерах/Верхний регистр

Дано текст — последовательность кодов ASCII — на стандартном вводе программы. Последовательность конечна, но ее длина заранее неизвестна. Надо вывести на стандартный вывод исходный текст, заменив в нем строчные буквы латиницы (a, …, z) прописными (A, …, Z). Указание воспользоваться особенностью кодовой таблицы ASCII: коды прописных букв отличаются от кодов соответствующих строчных на постоянную величину (а именно: 32.) Дополнительно предполагая поддержку средой русскоязычной локали, реализуйте аналогичное преобразование для кириллических текстов (используя стандартные функции языка.)

  • 1 Решение
  • 2 Использование стандартной библиотеки
  • 3 Кроме латиницы
  • 4 Задания
  • 5 См. также
  • 6 Примечания

Решение править

В следующей программе введенный пользователем текст на латинице переводится в верхний регистр, то есть строчные буквы становятся заглавными. Все прочие коды — включая заглавные буквы и символы, не являющиеся латинскими буквами — не меняются.

Обратите внимание на то, что с символами (переменными типа 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-символьной) латиницы. В основе такой поддержки — два следующих понятия:

  1. локаль — набор сведений о письменности, языке и культуре, включающий, помимо прочего, таблицы соответствия символов верхнего и нижнего регистров;
  2. широкие символьные типы ( wchar_t , wint_t ; англ. wide character ) — для представления ряда письменностей (например — основанных на иероглифах), а равно для представления текстов на нескольких языках, «байтового» типа char оказывается недостаточно; как следствие, в задачах, связанных с обработкой многоязычных текстов, его заменяет тип wchar_t ; аналогично, в операциях ввода-вывода используется тип wint_t (и константа WEOF .)

Соответственно, в исходный вариант вносятся следующие изменения.

  1. Появляется вызов setlocale ( LC_ALL , «» ) , инициализирующий локаль в соответствии с текущими настройками. (По-умолчанию, при запуске программы полагается setlocale ( LC_ALL , «C» ) — установка «стандартной» локали.) [5]
  2. Функции getwchar , towupper , putwchar заменяют соответствующие для «узких» символов ( getchar , toupper , putchar .) Соответственно меняются тип ( int → wint_t ) и константа признака исчерпания входного потока ( EOF → WEOF .) [6][7][8]
  3. Включаются соответствующие заголовки ( 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 .

Задания править

  1. Проверьте работу программы вводом строк Hello! и Привет! . Удостоверьтесь, что «базовые» варианты решения выполняют заданное преобразование лишь для первой из них, в то время как «интернационализованное» решение действует и в отношении кириллического ввода.
  2. Разработайте варианты программы, выполняющие (вновь для латиницы) a. преобразование верхнего регистра в нижний и b. «переключение» регистра — Hello! → hELLO! . (Указание: воспользуйтесь стандартными функциями islower и isupper . [9][10] )

См. также править

Примечания править

  1. ↑7.21.7.8 The putchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  2. ↑7.21.7.6 The getchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  3. ↑7.21.10.3 The ferror function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  4. ↑7.4.2 Character case mapping functions (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  5. ↑7.11.1.1 The setlocale function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  6. ↑7.29.3.7 The getwchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  7. ↑7.30.3.1.2 The towupper function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  8. ↑7.29.3.9 The putwchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  9. ↑7.4.1.7 The islower function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
  10. ↑7.4.1.11 The isupper function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.

Преобразование в верхний и нижний регистр в 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++: три основных метода

Изменение регистра в .NET

Если вы пишете приложение, которое принимает входные данные от пользователя, вы никогда не сможете определить, в каком случае (верхний или нижний) он будет использовать для ввода данных. Часто требуется обеспечить согласованность регистра строк, особенно если они отображаются в пользовательском интерфейсе. В таблице ниже описаны три метода изменения регистра. Для первых двух методов имеются перегруженные варианты, учитывающие язык и региональные параметры.

Имя метода Использовать
String.ToUpper Преобразует все символы в строке в верхний регистр.
String.ToLower Преобразует все символы в строке в нижний регистр.
TextInfo.ToTitleCase Преобразует первые символы всех слов в строке в заглавные.

Методы String.ToUpper и String.ToLower не следует использовать для преобразования строк для их сравнения или проверки на равенство. Дополнительные сведения см. в разделе Сравнение строк смешанного регистра .

Сравнение строк смешанного регистра

Чтобы сравнить строки, содержащие символы в разных регистрах, для их упорядочения, вызовите одну из перегрузок метода String.CompareTo с параметром comparisonType и укажите значение StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCase или StringComparison.OrdinalIgnoreCase для аргумента comparisonType . Для сравнения с использованием определенного языка, отличного от текущего языка и региональных параметров, вызовите перегрузку метода String.CompareTo с параметрами culture и options и укажите значение CompareOptions.IgnoreCase для аргумента options .

Чтобы сравнить строки смешанного регистра, чтобы определить, равны ли они, вызовите одну из перегрузок String.Equals метода с параметром comparisonType и укажите значение StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCaseили StringComparison.OrdinalIgnoreCase для аргумента comparisonType .

Метод ToUpper

Метод String.ToUpper преобразует все символы в строке в верхний регистр. В примере ниже смешанный регистр строки «Hello World!» изменяется на верхний.

string properString = "Hello World!"; Console.WriteLine(properString.ToUpper()); // This example displays the following output: // HELLO WORLD! 
Dim MyString As String = "Hello World!" Console.WriteLine(MyString.ToUpper()) ' This example displays the following output: ' HELLO WORLD! 

В предыдущем примере по умолчанию учитываются язык и региональные параметры. В нем применяются соглашения об использовании регистров, действующие для текущих языка и региональных параметров. Чтобы выполнить изменение регистра без учета языка и региональных параметров или применить соглашения о регистре определенного языка и региональных параметров, используйте перегрузку String.ToUpper(CultureInfo) метода и укажите значение CultureInfo.InvariantCulture или System.Globalization.CultureInfo объект , представляющий указанный язык и региональные culture параметры в параметре . Пример использования метода для изменения регистра ToUpper без учета языка и региональных параметров см. в разделе Изменение регистра без учета языка и региональных параметров.

Метод ToLower

Метод String.ToLower аналогичен предыдущему методу, однако преобразует все символы в строке в нижний регистр. В примере ниже регистр строки «Hello World!» изменяется на нижний.

string properString = "Hello World!"; Console.WriteLine(properString.ToLower()); // This example displays the following output: // hello world! 
Dim MyString As String = "Hello World!" Console.WriteLine(MyString.ToLower()) ' This example displays the following output: ' hello world! 

В предыдущем примере по умолчанию учитываются язык и региональные параметры. В нем применяются соглашения об использовании регистров, действующие для текущих языка и региональных параметров. Чтобы выполнить изменение регистра без учета языка и региональных параметров или применить соглашения о регистре определенного языка и региональных параметров, используйте перегрузку String.ToLower(CultureInfo) метода и укажите значение CultureInfo.InvariantCulture или System.Globalization.CultureInfo объект , представляющий указанный язык и региональные culture параметры в параметре . Пример использования метода для изменения регистра ToLower(CultureInfo) без учета языка и региональных параметров см. в разделе Изменение регистра без учета языка и региональных параметров.

Метод ToTitleCase

Метод TextInfo.ToTitleCase преобразует первый символ каждого слова в верхний регистр, а остальные символы — в нижний. Однако слова, состоящие только из прописных букв, считаются сокращениями и не преобразуются.

Метод TextInfo.ToTitleCase учитывает регистр, то есть он использует соглашения об использовании регистров, действующие для определенного языка и региональных параметров. Чтобы вызвать этот метод, сначала нужно получить объект TextInfo, представляющий соглашения об использовании регистров, из свойства CultureInfo.TextInfo конкретного языка и региональных параметров.

В примере ниже каждая строка из массива передается в метод TextInfo.ToTitleCase. Среди строк есть как строки заголовков, так и сокращения. Строки преобразуются в последовательности слов, начинающихся с заглавных букв, согласно соглашениям об использовании регистров для языка и региональных параметров «Английский (США)».

using System; using System.Globalization; public class Example < public static void Main() < string[] values = < "a tale of two cities", "gROWL to the rescue", "inside the US government", "sports and MLB baseball", "The Return of Sherlock Holmes", "UNICEF and children">; TextInfo ti = CultureInfo.CurrentCulture.TextInfo; foreach (var value in values) Console.WriteLine(" --> ", value, ti.ToTitleCase(value)); > > // The example displays the following output: // a tale of two cities --> A Tale Of Two Cities // gROWL to the rescue --> Growl To The Rescue // inside the US government --> Inside The US Government // sports and MLB baseball --> Sports And MLB Baseball // The Return of Sherlock Holmes --> The Return Of Sherlock Holmes // UNICEF and children --> UNICEF And Children 
Imports System.Globalization Module Example Public Sub Main() Dim values() As String = Dim ti As TextInfo = CultureInfo.CurrentCulture.TextInfo For Each value In values Console.WriteLine(" --> ", value, ti.ToTitleCase(value)) Next End Sub End Module ' The example displays the following output: ' a tale of two cities --> A Tale Of Two Cities ' gROWL to the rescue --> Growl To The Rescue ' inside the US government --> Inside The US Government ' sports and MLB baseball --> Sports And MLB Baseball ' The Return of Sherlock Holmes --> The Return Of Sherlock Holmes ' UNICEF and children --> UNICEF And Children 

Обратите внимание на то, что хотя метод TextInfo.ToTitleCase и учитывает язык и региональные параметры, он не обеспечивает лингвистическую правильность использования прописных и строчных букв. Например, в предыдущем примере метод преобразует строку «a tale of two cities» в «A Tale Of Two Cities». При этом лингвистически правильным для языка и региональных параметров en-US будет преобразование «A Tale of Two Cities».

См. также

  • Базовые операции со строками в .NET Framework
  • Выполнение строковых операций, не зависящих от языка и региональных параметров

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

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