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

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

  • автор:

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

Как строку перевести в нижний регистр?
Есть строка: «с РазЛИчными БУКвамИ»
Надо получить «с различными буквами»

(0) Что такое СП?

(1) Спасибо! ))
НРег (Lower)
Синтаксис:
НРег()
Параметры:
(обязательный)
Тип: Строка. Исходная строка.
Возвращаемое значение:
Тип: Строка. Строка, полученная в результате преобразования.
Описание:
Преобразует все символы строки в нижний регистр.
Пример:
ГосНомер = НРег(ОсновноеСредство.ГосНомер);

Программист всегда исправляет последнюю ошибку.

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

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 . Это дает одинаковый результат в каждой культуре и работает более эффективно.

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

Есть функция 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 не будет опубликован. Обязательные поля помечены *