Преобразование в верхний и нижний регистр в 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++: три основных метода
C++ преобразовать русскую строку в нижний регистр
Не выходит преобразовать строку с русским текстом к нижнему регистру, для латиницы все работает, а вот кириллица нет. Код такой:
setlocale(LC_ALL,"Russian"); string source = "GNU Linux РуСсКиЙ ТеКсТ"; for ( size_t i = 0; i
Как еще можно преобразовать русскую строку в нижний регистр?

makeB
24.01.13 21:05:54 MSK
anonymous
( 24.01.13 21:08:14 MSK )
И что значит «Russian» ? Кодировка какая? А кодировка исходника?
anonymous
( 24.01.13 21:10:35 MSK )
#include #include std::string source = "GNU Linux РуСсКиЙ ТеКсТ"; std::transform(source.begin(), source.end(), source.begin(), ::tolower);
bhfq ★★★★★
( 24.01.13 21:11:58 MSK )
Последнее исправление: bhfq 24.01.13 21:12:54 MSK (всего исправлений: 1)
Ответ на: комментарий от bhfq 24.01.13 21:11:58 MSK

Так тоже не работает
makeB
( 24.01.13 21:13:52 MSK ) автор топика
Ответ на: комментарий от anonymous 24.01.13 21:10:35 MSK

И что значит «Russian» ? Кодировка какая? А кодировка исходника?
Кодировка ru utf-8.
makeB
( 24.01.13 21:14:55 MSK ) автор топика
Ответ на: комментарий от makeB 24.01.13 21:14:55 MSK
Так и указывай ru_RU.UTF-8.
slovazap ★★★★★
( 24.01.13 21:17:42 MSK )
Ответ на: комментарий от slovazap 24.01.13 21:17:42 MSK

Пробовал setlocale(LC_ALL, «ru_RU.UTF-8»); — результата не было.
makeB
( 24.01.13 21:19:51 MSK ) автор топика
Ответ на: комментарий от makeB 24.01.13 21:19:51 MSK

Для unicode есть wstring. Попробуй.
netcat ★★
( 24.01.13 21:23:12 MSK )
Ответ на: комментарий от makeB 24.01.13 21:13:52 MSK

конечно не работает — у тебя utf8 в файле, а ты по одному _байту_ конвертируешь символы функцией для utf32 (в линуксе), используй wstring и данные ему подсовывай корректные, например с wcin
wota ★★
( 24.01.13 21:29:49 MSK )
zJes ★★
( 24.01.13 21:30:18 MSK )
Ответ на: комментарий от wota 24.01.13 21:29:49 MSK

Эммм. если я правильно сделал, то не работает, а сделал так:
std::string source = "GNU Linux РуСсКиЙ ТеКсТ"; wstring ws ( source.begin(), source.end() ); std::transform(ws.begin(), ws.end(), ws.begin(), ::tolower); string sss( ws.begin(), ws.end() ); cout
makeB
( 24.01.13 21:36:53 MSK ) автор топика
Ответ на: комментарий от zJes 24.01.13 21:30:18 MSK

Ага, в консольное приложение тянуть кют?
makeB
( 24.01.13 21:37:37 MSK ) автор топика
Ответ на: комментарий от makeB 24.01.13 21:36:53 MSK
bhfq ★★★★★
( 24.01.13 21:37:37 MSK )
Ответ на: комментарий от makeB 24.01.13 21:37:37 MSK
🙂 Как пожелаешь. Можно и тянуть. профитов больше будет. 🙂
zJes ★★
( 24.01.13 21:42:01 MSK )
Ответ на: комментарий от makeB 24.01.13 21:36:53 MSK

неправильно, ты перегнал байты в wstring, а не символы, для этого надо либо брать use_facet, но это ненадежно, либо перегнать руками UTF8->UTF32(16 на win), это не так сложно, либо взять QtCore, советую последнее
wota ★★
( 24.01.13 21:42:38 MSK )
Ответ на: комментарий от bhfq 24.01.13 21:37:37 MSK

Хе, и так тоже не работает:
setlocale(LC_ALL, "ru_RU.UTF-8"); string source = "GNU Linux РуСсКиЙ ТеКсТ"; wstring ws (source.begin(), source.end()); transform(ws.begin(), ws.end(), ws.begin(), ::tolower); wcout
makeB
( 24.01.13 21:42:57 MSK ) автор топика
Ответ на: комментарий от makeB 24.01.13 21:37:37 MSK

Ага, в консольное приложение тянуть кют?
почему нет? оно модульное, и не храни русский текст вообще в коде, это моветон, и при правке в каком-нибудь «блокноте» слетит нахер
wota ★★
( 24.01.13 21:45:15 MSK )
Последнее исправление: wota 24.01.13 21:46:18 MSK (всего исправлений: 1)
Ответ на: комментарий от wota 24.01.13 21:45:15 MSK

и не храни русский текст вообще в коде, это моветон
Я не храню его, читаю из файла в строку, а потом необходимо произвести поиск слов, так вот поиск слов нужен независимо от регистра, а для этого всю эту бурду нужно преобразовать к какому либо одному регистру, вот такая вот каша.
makeB
( 24.01.13 21:47:38 MSK ) автор топика
Ответ на: комментарий от makeB 24.01.13 21:47:38 MSK

Я не храню его, читаю из файла в строку
файл в какой кодировке?
wota ★★
( 24.01.13 21:48:10 MSK )
Ответ на: комментарий от wota 24.01.13 21:48:10 MSK

все в ru_RU.UTF-8 и исходники, и система и файл с текстом
makeB
( 24.01.13 21:49:46 MSK ) автор топика
Ответ на: комментарий от makeB 24.01.13 21:49:46 MSK

если не хочется Qt, можешь взять:
и перегнать utf8->utf32(wchar_t на линуксе)
wota ★★
( 24.01.13 21:52:49 MSK )
Ответ на: комментарий от makeB 24.01.13 21:42:57 MSK
std::wstring ws(L"some Русский тексн"); std::transform(ws.begin(), ws.end(), ws.begin(), std::bind2nd(std::ptr_fun(&std::tolower), std::locale("ru_RU.UTF-8"))); std::wcout
Ведь гораздо сложнее чем QString::toLower. оно тебе надо? 🙂
zJes ★★
( 24.01.13 22:03:09 MSK )
Последнее исправление: zJes 24.01.13 22:04:22 MSK (всего исправлений: 1)
Ответ на: комментарий от zJes 24.01.13 22:03:09 MSK
Лично я хз о чем вы 🙂 У меня вообще ничего не работает
/usr/include/c++/4.2.1/bits/stl_function.h: In instantiation of 'std::binder2nd >': ../untitled/main.cpp:10: instantiated from here /usr/include/c++/4.2.1/bits/stl_function.h:435: error: forming reference to reference type 'const std::locale&' /usr/include/c++/4.2.1/bits/stl_function.h: In function 'std::binder2nd std::bind2nd(const _Operation&, const _Tp&) [with _Operation = std::pointer_to_binary_function, _Tp = std::locale]': ../untitled/main.cpp:10: instantiated from here /usr/include/c++/4.2.1/bits/stl_function.h:455: error: no matching function for call to 'std::binder2nd >::binder2nd(const std::pointer_to_binary_function&, const std::locale&)' /usr/include/c++/4.2.1/bits/stl_function.h:429: note: candidates are: std::binder2nd >::binder2nd(const std::binder2nd >&) ../untitled/main.cpp: At global scope: ../untitled/main.cpp: In instantiation of 'std::basic_ostream& std::operator<<(std::basic_ostream&, const std::basic_string&) [with _CharT = wchar_t, _Traits = std::char_traits, _Alloc = std::allocator]': ../untitled/main.cpp:11: instantiated from here ../untitled/main.cpp:11: error: explicit instantiation of 'std::basic_ostream& std::operator<<(std::basic_ostream&, const std::basic_string&) [with _CharT = wchar_t, _Traits = std::char_traits, _Alloc = std::allocator]' but no definition available ../untitled/main.cpp: In instantiation of 'std::basic_ostream& std::operator<<(std::basic_ostream&, const std::basic_string&) [with _CharT = wchar_t, _Traits = std::char_traits, _Alloc = std::allocator]': ../untitled/main.cpp:11: instantiated from here ../untitled/main.cpp:11: error: explicit instantiation of 'std::basic_ostream& std::operator<<(std::basic_ostream&, const std::basic_string&) [with _CharT = wchar_t, _Traits = std::char_traits, _Alloc = std::allocator]' but no definition available
String. To Lower Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает копию этой строки, переведенную в нижний регистр.
Перегрузки
Возвращает копию этой строки, переведенную в нижний регистр.
Возвращает копию этой строки, переведенную в нижний регистр, используя правила определения регистра заданного языка и региональных параметров.
ToLower()
Возвращает копию этой строки, переведенную в нижний регистр.
public: System::String ^ ToLower();
public string ToLower ();
member this.ToLower : unit -> string
Public Function ToLower () As String
Возвращаемое значение
Строка в нижнем регистре.
Примеры
В следующем примере несколько строк смешанного регистра преобразуются в нижний регистр.
using namespace System; using namespace System::Collections; int main() < array^info = ; Console::WriteLine( "The initial values in the array are:" ); IEnumerator^ myEnum = info->GetEnumerator(); while ( myEnum->MoveNext() ) < String^ s = safe_cast(myEnum->Current); Console::WriteLine( s ); > Console::WriteLine( " The lowercase of these values is:", Environment::NewLine ); IEnumerator^ myEnum1 = info->GetEnumerator(); while ( myEnum1->MoveNext() ) < String^ s = safe_cast(myEnum1->Current); Console::WriteLine( s->ToLower() ); > Console::WriteLine( " The uppercase of these values is:", Environment::NewLine ); IEnumerator^ myEnum2 = info->GetEnumerator(); while ( myEnum2->MoveNext() ) < String^ s = safe_cast(myEnum2->Current); Console::WriteLine( s->ToUpper() ); > > // The example displays the following output: // The initial values in the array are: // Name // Title // Age // Location // Gender // // The lowercase of these values is: // name // title // age // location // gender // // The uppercase of these values is: // NAME // TITLE // AGE // LOCATION // GENDER
using System; public class ToLowerTest < public static void Main() < string [] info = ; Console.WriteLine("The initial values in the array are:"); foreach (string s in info) Console.WriteLine(s); Console.WriteLine("The lowercase of these values is:", Environment.NewLine); foreach (string s in info) Console.WriteLine(s.ToLower()); Console.WriteLine("The uppercase of these values is:", Environment.NewLine); foreach (string s in info) Console.WriteLine(s.ToUpper()); > > // The example displays the following output: // The initial values in the array are: // Name // Title // Age // Location // Gender // // The lowercase of these values is: // name // title // age // location // gender // // The uppercase of these values is: // NAME // TITLE // AGE // LOCATION // GENDER
open System let info = [| "Name"; "Title"; "Age"; "Location"; "Gender" |] printfn "The initial values in the array are:" for s in info do printfn $"" printfn $"The lowercase of these values is:" for s in info do printfn $"" printfn $"The uppercase of these values is:" for s in info do printfn $"" // The example displays the following output: // The initial values in the array are: // Name // Title // Age // Location // Gender // // The lowercase of these values is: // name // title // age // location // gender // // The uppercase of these values is: // NAME // TITLE // AGE // LOCATION // GENDER
Public Class ToLowerTest Public Shared Sub Main() Dim info As String() = Console.WriteLine("The initial values in the array are:") Dim s As String For Each s In info Console.WriteLine(s) Next Console.WriteLine("The lowercase of these values is:", Environment.NewLine) For Each s In info Console.WriteLine(s.ToLower()) Next Console.WriteLine("The uppercase of these values is:", Environment.NewLine) For Each s In info Console.WriteLine(s.ToUpper()) Next End Sub End Class ' The example displays the following output: ' The initial values in the array are: ' Name ' Title ' Age ' Location ' Gender ' ' The lowercase of these values is: ' name ' title ' age ' location ' gender ' ' The uppercase of these values is: ' NAME ' TITLE ' AGE ' LOCATION ' GENDER
Комментарии
Этот метод учитывает правила регистра текущего языка и региональных параметров.
Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку, в которой все символы в текущем экземпляре преобразуются в нижний регистр.
Вопросы безопасности
Операция с регистром, полученная в результате вызова ToLower() метода, учитывает соглашения о регистре текущего языка и региональных параметров. Если вам нужна версия идентификатора операционной системы в нижнем или верхнем регистре, например имя файла, именованный канал или раздел реестра, используйте ToLowerInvariant методы или ToUpperInvariant . Это дает одинаковый результат в каждом языке и региональных параметрах (в ToLower() отличие от метода) и работает более эффективно.
Примечания для тех, кто вызывает этот метод
Как описано в разделе Рекомендации по использованию строк, рекомендуется избегать вызова методов регистра строк, которые заменяют значения по умолчанию, и вместо этого вызывать методы, требующие явного указания параметров. Чтобы преобразовать символ в нижний регистр с помощью соглашений о регистре текущего языка и региональных параметров, явно сообщите о своем намерении, вызвав перегрузку ToLower(CultureInfo) метода со значением для CurrentCulture параметра culture . Если вам не требуется лингвистическое сравнение, рассмотрите возможность использования Ordinal.
См. также раздел
- ToLowerInvariant()
- ToUpper()
- ToUpperInvariant()
Применяется к
ToLower(CultureInfo)
Возвращает копию этой строки, переведенную в нижний регистр, используя правила определения регистра заданного языка и региональных параметров.
public: System::String ^ ToLower(System::Globalization::CultureInfo ^ culture);
public string ToLower (System.Globalization.CultureInfo? culture);
public string ToLower (System.Globalization.CultureInfo culture);
member this.ToLower : System.Globalization.CultureInfo -> string
Public Function ToLower (culture As CultureInfo) As String
Параметры
Объект, задающий правила определения регистра для языка и региональных параметров. Если значением параметра culture является null , используется текущий язык и региональные параметры.
Возвращаемое значение
Эквивалент текущей строки в нижнем регистре.
Примеры
В следующем примере две строки прописных символов преобразуются в символы нижнего регистра с помощью English-United States и Turkish-Turkey языка и региональных параметров, а затем сравниваются строки в нижнем регистре. Строки в верхнем регистре идентичны, за исключением того, что для каждого вхождения прописной буквы Юникода в одной строке другая строка содержит латинскую прописную букву I WITH DOT ABOVE.
// Sample for String::ToLower(CultureInfo) using namespace System; using namespace System::Globalization; void CodePoints( String^ title, String^ s ) < Console::Write( "The code points in are: ", Environment::NewLine, title ); System::Collections::IEnumerator^ myEnum = s->GetEnumerator(); while ( myEnum->MoveNext() ) < UInt16 u = safe_cast(myEnum->Current); Console::Write( " ", u ); > Console::WriteLine(); > int main() < String^ str1 = "INDIGO"; // str2 = str1, except each 'I' is '\u0130' (Unicode LATIN CAPITAL I WITH DOT ABOVE). array^temp = ; String^ str2 = gcnew String( temp ); String^ str3; String^ str4; Console::WriteLine(); Console::WriteLine( "str1 = ''", str1 ); Console::WriteLine(); Console::WriteLine( "str1 is to str2.", ((0 == String::CompareOrdinal( str1, str2 )) ? (String^)"equal" : "not equal") ); CodePoints( "str1", str1 ); CodePoints( "str2", str2 ); Console::WriteLine(); // str3 is a lower case copy of str2, using English-United States culture. Console::WriteLine( "str3 = Lower case copy of str2 using English-United States culture." ); str3 = str2->ToLower( gcnew CultureInfo( "en-US",false ) ); // str4 is a lower case copy of str2, using Turkish-Turkey culture. Console::WriteLine( "str4 = Lower case copy of str2 using Turkish-Turkey culture." ); str4 = str2->ToLower( gcnew CultureInfo( "tr-TR",false ) ); // Compare the code points in str3 and str4. Console::WriteLine(); Console::WriteLine( "str3 is to str4.", ((0 == String::CompareOrdinal( str3, str4 )) ? (String^)"equal" : "not equal") ); CodePoints( "str3", str3 ); CodePoints( "str4", str4 ); > /* This example produces the following results: str1 = 'INDIGO' str1 is not equal to str2. The code points in str1 are: 0049 004e 0044 0049 0047 004f The code points in str2 are: 0130 004e 0044 0130 0047 004f str3 = Lower case copy of str2 using English-United States culture. str4 = Lower case copy of str2 using Turkish-Turkey culture. str3 is equal to str4. The code points in str3 are: 0069 006e 0064 0069 0067 006f The code points in str4 are: 0069 006e 0064 0069 0067 006f */
// Sample for String.ToLower(CultureInfo) using System; using System.Globalization; class Sample < public static void Main() < String str1 = "INDIGO"; // str2 = str1, except each 'I' is '\u0130' (Unicode LATIN CAPITAL I WITH DOT ABOVE). String str2 = new String(new Char[] ); String str3, str4; Console.WriteLine(); Console.WriteLine("str1 = ''", str1); Console.WriteLine(); Console.WriteLine("str1 is to str2.", ((0 == String.CompareOrdinal(str1, str2)) ? "equal" : "not equal")); CodePoints("str1", str1); CodePoints("str2", str2); Console.WriteLine(); // str3 is a lower case copy of str2, using English-United States culture. Console.WriteLine("str3 = Lower case copy of str2 using English-United States culture."); str3 = str2.ToLower(new CultureInfo("en-US", false)); // str4 is a lower case copy of str2, using Turkish-Turkey culture. Console.WriteLine("str4 = Lower case copy of str2 using Turkish-Turkey culture."); str4 = str2.ToLower(new CultureInfo("tr-TR", false)); // Compare the code points in str3 and str4. Console.WriteLine(); Console.WriteLine("str3 is to str4.", ((0 == String.CompareOrdinal(str3, str4)) ? "equal" : "not equal")); CodePoints("str3", str3); CodePoints("str4", str4); > public static void CodePoints(String title, String s) < Console.Write("The code points in are: ", Environment.NewLine, title); foreach (ushort u in s) Console.Write(" ", u); Console.WriteLine(); > > /* This example produces the following results: str1 = 'INDIGO' str1 is not equal to str2. The code points in str1 are: 0049 004e 0044 0049 0047 004f The code points in str2 are: 0130 004e 0044 0130 0047 004f str3 = Lower case copy of str2 using English-United States culture. str4 = Lower case copy of str2 using Turkish-Turkey culture. str3 is equal to str4. The code points in str3 are: 0069 006e 0064 0069 0067 006f The code points in str4 are: 0069 006e 0064 0069 0067 006f */
// Sample for String.ToLower(CultureInfo) open System open System.Globalization let codePoints title s = printf $"The code points in are: " for u in s do printf $" " printfn "" let str1 = "INDIGO" // str2 = str1, except each 'I' is '\u0130' (Unicode LATIN CAPITAL I WITH DOT ABOVE). let str2 = String [| '\u0130'; 'N'; 'D'; '\u0130'; 'G'; 'O' |] printfn $"\nstr1 = ''\n" printfn $"""str1 is to str2.""" codePoints "str1" str1 codePoints "str2" str2 // str3 is a lower case copy of str2, using English-United States culture. printfn "\nstr3 = Lower case copy of str2 using English-United States culture." let str3 = str2.ToLower(CultureInfo("en-US", false)) // str4 is a lower case copy of str2, using Turkish-Turkey culture. printfn "str4 = Lower case copy of str2 using Turkish-Turkey culture." let str4 = str2.ToLower(CultureInfo("tr-TR", false)) // Compare the code points in str3 and str4. printfn $"""\nstr3 is to str4.""" codePoints "str3" str3 codePoints "str4" str4 (* This example produces the following results: str1 = 'INDIGO' str1 is not equal to str2. The code points in str1 are: 0049 004e 0044 0049 0047 004f The code points in str2 are: 0130 004e 0044 0130 0047 004f str3 = Lower case copy of str2 using English-United States culture. str4 = Lower case copy of str2 using Turkish-Turkey culture. str3 is equal to str4. The code points in str3 are: 0069 006e 0064 0069 0067 006f The code points in str4 are: 0069 006e 0064 0069 0067 006f *)
' Sample for String.ToLower(CultureInfo) Imports System.Globalization Class Sample Public Shared Sub Main() Dim str1 As [String] = "INDIGO" ' str2 = str1, except each 'I' is '\u0130' (Unicode LATIN CAPITAL I WITH DOT ABOVE). Dim str2 As New [String](New [Char]() ) Dim str3, str4 As [String] Console.WriteLine() Console.WriteLine("str1 = ''", str1) Console.WriteLine() Console.WriteLine("str1 is to str2.", _ IIf(0 = [String].CompareOrdinal(str1, str2), "equal", "not equal")) CodePoints("str1", str1) CodePoints("str2", str2) Console.WriteLine() ' str3 is a lower case copy of str2, using English-United States culture. Console.WriteLine("str3 = Lower case copy of str2 using English-United States culture.") str3 = str2.ToLower(New CultureInfo("en-US", False)) ' str4 is a lower case copy of str2, using Turkish-Turkey culture. Console.WriteLine("str4 = Lower case copy of str2 using Turkish-Turkey culture.") str4 = str2.ToLower(New CultureInfo("tr-TR", False)) ' Compare the code points in str3 and str4. Console.WriteLine() Console.WriteLine("str3 is to str4.", _ IIf(0 = [String].CompareOrdinal(str3, str4), "equal", "not equal")) CodePoints("str3", str3) CodePoints("str4", str4) End Sub Public Shared Sub CodePoints(title As [String], s As [String]) Console.Write("The code points in are: ", Environment.NewLine, title) Dim c As Char For Each c In s Console.Write(" ", AscW(c)) Next c Console.WriteLine() End Sub End Class ' 'str1 = 'INDIGO' ' 'str1 is not equal to str2. ' 'The code points in str1 are: '0049 004e 0044 0049 0047 004f ' 'The code points in str2 are: '0130 004e 0044 0130 0047 004f ' 'str3 = Lower case copy of str2 using English-United States culture. 'str4 = Lower case copy of str2 using Turkish-Turkey culture. ' 'str3 is equal to str4. ' 'The code points in str3 are: '0069 006e 0064 0069 0067 006f ' 'The code points in str4 are: '0069 006e 0064 0069 0067 006f
Комментарии
Правила регистра языка и региональных параметров, заданные culture параметром , определяют способ изменения регистра строки.
Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку, в которой все символы в текущем экземпляре преобразуются в нижний регистр.
Вопросы безопасности
Если передать ToLower(CultureInfo) метод объекту, отличному CultureInfo от CultureInfo.InvariantCulture, операция создания регистра будет учитывать правила, относящиеся к языку и региональным параметрам. Если вам нужна версия идентификатора операционной системы в нижнем или верхнем регистре, например имя файла, именованный канал или раздел реестра, используйте ToLowerInvariant метод или ToUpperInvariant . Это дает одинаковый результат в каждой культуре и работает более эффективно.
Строка С++ в верхнем и нижнем регистре
В этой статье мы углубимся в преобразование входной строки в нижний и верхний регистр в C++. Класс C++ String предоставляет огромное количество встроенных функций для выполнения операций над входной строкой.
Строка С++ в верхнем регистре
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
Значения ASCII для букв верхнего регистра (A-Z): 65–92
#include using namespace std; int main() < char X; cout>X; X=X-32; cout
Как видно выше, разница между диапазоном значений ASCII строчных и прописных букв составляет 32, т.е. 97-65.
Итак, чтобы преобразовать ввод в верхний регистр, нам нужно вычесть 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 к значению ASCII входного символа, чтобы преобразовать его в нижний регистр.
Enter a character:R Converted character to lowercase:r
Заключение
В этой статье мы поняли преобразование ввода символов и строк в нижний и верхний регистр в C++. В отношении методов ASCII важно отметить тот факт, что они просто преобразуют введенные символы в ASCII, а затем обратно. Если кто-то введет число вместо символа, вы получите случайный вывод.
Таким образом, вы можете либо обработать входные данные и убедиться, что введенные значения на самом деле являются символами, либо просто использовать функции toupper() и tolower(). Мы надеемся, что этот урок был полезен для вас. Комментарий ниже, если у вас есть какие-либо вопросы.
Рекомендации
- Строка C++ в верхнем регистре
- Строка C++ в нижнем регистре