Класс System::Text::StringBuilder — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Класс System::Text::StringBuilder

2022-10-29 22
Класс System::Text::StringBuilder 0.00 из 5.00 0 оценок
Заказать работу

(http://msdn.microsoft.com/ru-ru/library/system.text.stringbuilder.aspx)

 

Пример использования строки StringBuilder:

 

System::Text::StringBuilder sb = gcnew

   System::Text::StringBuilder(" Иран – азиатская страна ");

sb[3] = ' к ';

System::Console::WriteLine(sb->ToString());

                 // Вывод: Ирак – азиатская страна

 

Пример выделения строке StringBuilder нужного объема памяти:

 

System::Text::StringBulder sb1 = gcnew

                            System::Text::StringBuilder(128);

System::Text::StringBulder sb2 = gcnew

                    System::Text::StringBuilder("abcdef", 16);

 

Таблица 3.2. Основные свойства и методы класса System::Text::StringBuilder

Имя Описание
Свойства  
Capacity Возвращает или задает максимальное число знаков, которое может содержаться в памяти, назначенной текущей строке StringBuilder.
Chars [i] Возвращает или задает символ на указанной позиции (i) в текущей строке StringBuilder.
Length Возвращает или задает длину текущей строки StringBuilder.
MaxCapacity Возвращает максимальную емкость текущей строки StringBuilder (определяется значением Int32.MaxValue).
Методы  
Append(V); Добавляет к текущей строке строковое представление указанного значения любого типа (V).
Append(ch); Append(ch,n); Добавляет к текущей строке строковое представление указанного символа Unicode (ch) или заданное число его копий (n).
Append(arrCh[]); Append(arrCh[],i,L); Добавляет к текущей строке строковое представление всех символов Unicode из указанного массива (arrCh) или L его элементов, начиная с i-го.
Append(s); Append(s,i,L); Добавляет к текущей строке копию указанной строки (s, типа String) или подстроки, начиная с i-го индекса и длиной L знаков.
AppendFormat(sf,v1); AppendFormat(sf,v1,v2); AppendFormat(sf,v1,v2,v3); AppendFormat(sf,arrV[]); Добавляет к текущей строке строковое представление одного, двух или трех указанных объектов (v1, v2, v3), либо элементов массива (arrV), выполненное в соответствии с элементами формата (см. п.4.2) в указанной строке (sf).
AppendLine(); AppendLine(s); Добавляет копию указанной строки (s, типа String) и знак завершения строки в конец текущей строки.
Clear(); Удаляет все символы из текущей строки (аналогичен ука-занию 0 (ноля) в свойстве Length строки StringBuilder).
CopyTo(i1,arrCh[],i2,L); Копирует заданное число символов (L) из текущей строки, начиная с указанной позиции (i1), и вставляет в массив символов (arrCh), начиная с i2-элемента (заменяя их).
EnsureCapacity (n); Устанавливает максимальную емкость текущей строки (StringBuilder) не меньше указанного значения (n).
Insert(i, V); Вставляет в текущую строку, начиная с i-ой позиции, строковое представление указанного значения любого типа (V).
Insert(i, c h); Вставляет в текущую строку, начиная с i-ой позиции, строковое представление указанного символа Unicode (ch).
Insert(i,arrCh[]); Insert(i,arrCh[],i2,L); Вставляет в текущую строку, начиная с i-ой позиции, стро-ковое представление всех символов Unicode из указанного массива (arrCh) или L его элементов, начиная с i2-го.
Insert(i,s); Insert(i,s,n); Вставляет в текущую строку, начиная с i-ой позиции, одну или n копий указанной строки (s, типа String).
Remove(i,L); Удаляет указанный диапазон символов (L знаков, начиная с i-го) из текущей строки.
Replace(ch1,ch2); Replace(ch1,ch2,i,L); Замещает в текущей строке или подстроке (L знаков, начиная с i-го) все вхождения указанного символа (ch1) на другой указанный символ (ch2).
Replace(s1,s2); Replace(s1,s2,i,L); Замещает в текущей строке или подстроке (L знаков, начиная с i-го) все вхождения указанной строки (s1) на другую указанную строку (s2).
ToString(); ToString(i,L); Преобразует к типу String значение текущей строки или подстроки (L знаков, начиная с i-го).

 

Пример3.8. Использование свойств Capacity, MaxCapacity и Length, а также методов EnsureCapacity, ToString.

 

#include "stdafx.h"

using namespace System;

using namespace System::Text;

int main() {

// Создание строк StringBuilder

StringBuilder^ sb1 = gcnew StringBuilder("abc");

StringBuilder^ sb2 = gcnew StringBuilder("abc", 16);

Console::WriteLine("a1) sb1->Length = {0}, sb1->Capacity = {1}",

                  sb1->Length, sb1->Capacity);

Console::WriteLine("a2) sb2->Length = {0}, sb2->Capacity = {1}",

                  sb2->Length, sb2->Capacity);

Console::WriteLine("a3) sb1->ToString() = \"{0}\", " +

                  "sb2->ToString() = \"{1}\"",

                  sb1->ToString(), sb2->ToString());

Console::WriteLine("a4) sb1->MaxCapacity = {0}, " +

                  "sb2->MaxCapacity = {1}",

                  sb1->MaxCapacity, sb2->MaxCapacity);

sb1->EnsureCapacity(50);

Console::WriteLine("\nМаксимально допустимое число знаков " +

                  "в строке sb1 увеличено до 50.");

Console::WriteLine("b1) sb1->Length = {0}, sb1->Capacity = {1}",

                  sb1->Length, sb1->Capacity);

Console::WriteLine("b2) sb2->Length = {0}, sb2->Capacity = {1}",

                  sb2->Length, sb2->Capacity);

Console::WriteLine("b3) sb1->ToString() = \"{0}\", " +

                  "sb2->ToString() = \"{1}\"",

                  sb1->ToString(), sb2->ToString());

sb1->Length = 0;

Console:: WriteLine ("\ n Установка длины строки sb 1 в 0.");

sb2->Capacity = 51;

Console::WriteLine("Максимально допустимое число знаков " +

                  "в строке sb2 увеличено до 51.");

Console::WriteLine("c1) sb1->Length = {0}, sb1->Capacity = {1}",

                  sb1->Length, sb1->Capacity);

Console::WriteLine("c2) sb2->Length = {0}, sb2->Capacity = {1}",

                  sb2->Length, sb2->Capacity);

Console::WriteLine("c3) sb1->ToString() = \"{0}\", " +

                  "sb2->ToString() = \"{1}\"",

                  sb1->ToString(), sb2->ToString());

Console::ReadLine();

return 0;

}

/* Вывод:

a1) sb1.Length = 3, sb1.Capacity = 16

a2) sb2.Length = 3, sb2.Capacity = 16

a3) sb1.ToString() = "abc", sb2.ToString() = "abc"

a4) sb1.MaxCapacity = 2147483647, sb2.MaxCapacity = 2147483647

Максимально допустимое число знаков в строке sb1 увеличено до 50.

b1) sb1.Length = 3, sb1.Capacity = 50

b2) sb2.Length = 3, sb2.Capacity = 16

b3) sb1.ToString() = "abc", sb2.ToString() = "abc"

Установка длины строки sb1 в 0.

Максимально допустимое число знаков в строке sb2 увеличено до 51.

c1) sb1.Length = 0, sb1.Capacity = 50

c2) sb2.Length = 3, sb2.Capacity = 51

c3) sb1.ToString() = "", sb2.ToString() = "abc"

*/

 

Пример 3.9. Использование методов Append, AppendFormat, Insert и Replace класса StringBuilder для изменения значения строки.

 

#include "stdafx.h"

using namespace System;

using namespace System::Text;

int main() {

// Создание строки StringBuilder максимальной емкостью

// до 50-ти символов и ее инициализация значением "ABC".

StringBuilder^ sb = gcnew StringBuilder("ABC", 50);

// Добавление 3-х символов в конец строки StringBuilder.

sb->Append(gcnew array<Char>{ 'D', 'E', 'F' });

// Добавление строки формата в конец строки StringBuilder.

sb->AppendFormat("GHI{0}{1}", (Char)'J', (Char)'k');

// Вывод длины строки StringBuilder и ее содержимого.

Console::WriteLine(" {0} симв.: {1} ", sb->Length, sb->ToString());

// Вставка подстроки в самое начало строки StringBuilder.

sb->Insert(0, "Алфавит: ");

// Замена всех вхождений символа "k" символом "K".

sb->Replace('k', 'K');

// Вывод длины строки StringBuilder и ее содержимого.

Console::WriteLine(" {0} симв.: {1} ", sb->Length, sb->ToString());

Console::ReadLine();

return 0;

}

// Вывод:

// 11 симв.: ABCDEFGHIJk

// 20 симв.: Алфавит: ABCDEFGHIJK

 

 

Структура System::Char

(http://msdn.microsoft.com/ru-ru/library/system.char.aspx)

 

Таблица 3.3. Основные поля и методы структуры Char.

Имя Описание
Поля  
MaxValue Представляет наибольшее возможное значение типа Char. Это поле является константой.
MinValue Представляет наименьшее возможное значение типа Char. Это поле является константой.
Методы  
CompareTo(ch); Сравнивает текущий символ с заданным символом (ch) (в порядке сортировки) и возвращает целое число (Int32): – отрицательное число, если текущий символ предшествует ch; – ноль, если текущий символ и ch имеют одну и ту же позицию в порядке сортировки; – положительное число, если текущий символ стоит после ch.
GetNumericValue(ch); GetNumericValue(s,i); Преобразует указанный числовой символ Unicode (ch – символьное представление цифры) или такой символ в указанной позиции (i) заданной строки (s) в число двойной точности с плавающей запятой.
GetUnicodeCategory(ch); GetUnicodeCategory(s,i); Относит указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к группе, определенной одним из значений перечисления System.Globalization.UnicodeCategory (возвращая соответствующее строковое значение):   "UppercaseLetter" – буква верхнего регистра; "LowercaseLetter" – буква нижнего регистра; "DecimalDigitNumber" – знак десятичной цифры в диапазоне от 0 до 9; "LetterNumber" – число, представленное буквой вместо десятичной цифры; например, обозначение римской цифры пять – "V"; "SpaceSeparator" – символ пробела; "LineSeparator" – символ, используемый для разделения строк текста; "ParagraphSeparator" – символ, используемый для разделения абзацев; "Control" – управляющий символ кода со значением в Unicode, равным U+007F либо находящемся в диапазоне от U+0000 до U+001F или от U+0080 до U+009F (например, ACK, BEL, CR, FF, LF и VT); "ConnectorPunctuation" – знак пунктуации, являющийся соединителем двух знаков (_); "DashPunctuation" – знак тире или дефиса; "OpenPunctuation" – открывающий символ для одного из парных пунктуационных знаков, таких как круглые, квадратные и фигурные скобки; "ClosePunctuation" – закрывающий символ для одного из парных пунктуационных знаков, таких как круглые, квадратные и фигурные скобки; "InitialQuotePunctuation" – открывающий или начальный знак кавычки («); "FinalQuotePunctuation" – закрывающий или заключительный знак кавычки (»); "OtherPunctuation" – знак пунктуации, который не является соединителем, тире, открывающим или закрывающим знаком пунктуации, начальной или заключительной кавычкой (!@#%&*;:’.,”/?\); "MathSymbol" – математические символы (+=~<>); "CurrencySymbol" – символ денежной единицы ($); "ModifierSymbol" – символ модификатора, который указывает на изменения окружающих его символов (^`); "OtherSymbol" – символ, который не является математическим символом, символом денежной единицы или символом модификатора (№).
IsControl(ch); IsControl(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории управляющих символов (возвращает true или false).
IsDigit(ch); IsDigit(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории десятичных цифр (возвращает true или false).
IsLetter(ch); IsLetter(s,i); Показывает, относится ли указанный знак Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории букв Unicode (возвращает true или false).
IsLetterOrDigit(ch); IsLetterOrDigit(s,i); Показывает, относится ли указанный знак Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории букв или десятичных цифр (возвращает true или false).
IsLower(ch); IsLower(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории букв нижнего регистра (возвращает true или false).
IsNumber(ch); IsNumber(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории цифр (возвращает true или false).
IsPunctuation(ch); IsPunctuation(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории знаков препинания (возвращает true или false).
IsSeparator(ch); IsSeparator(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории знаков-разделителей (возвращает true или false).
IsSymbol(ch); IsSymbol(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории символьных знаков (возвращает true или false).
IsUpper(ch); IsUpper(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории букв верхнего регистра (возвращает true или false).
IsWhiteSpace(ch); IsWhiteSpace(s,i); Показывает, относится ли указанный символ Unicode (ch) или символ в указанной позиции (i) заданной строки (s) к категории пробелов (возвращает true или false).
Parse(s); Преобразует значение указанной строки (s), содержащей один знак или null, в эквивалентный символ Unicode.
ToLower (ch); ToUpper (ch); Преобразует значение символа Unicode (ch) в его эквива-лент соответственно в нижнем или верхнем регистре.
ToString(); ToString(ch); Преобразует значение текущего или указанного символа Unicode (ch) в эквивалентное ему строковое представление.
TryParse(s, ch); Преобразует значение указанной строки (s), содержащей один знак или null, в эквивалентный возвращаемый символ Unicode (ch). Метод возвращает значение true или false, указывающее, успешно ли выполнено преобразование.

 

 

Пример 3.10. Применение методов CompareTo, GetNumericValue, GetUnicodeCategory, IsControl, IsDigit, IsLetter, IsLetterOrDigit, IsLower, IsNumber, IsPunctuation, IsSeparator, IsSymbol, IsUpper, IsWhiteSpace, Parse, ToLower, ToUpper, ToString, TryParse объекта Char.

 

#include "stdafx.h"

using namespace System;

int main(array<System::String^> ^args) {

wchar_t wch;

char chA = 'A';

char ch1 = '1';

String^ st = "G";

String^ str = "Test string";

Console::WriteLine(chA.CompareTo('B'));

                // Вывод: "-1" (значение 'A' меньше чем 'B')

Console::WriteLine(Char::GetNumericValue(ch1)); // Вывод: "1"

Console::WriteLine(Char::GetUnicodeCategory(ch1));

                // Вывод: "DecimalDigitNumber"

Console::WriteLine(Char::GetUnicodeCategory(str, 0));

                // Вывод: "UppercaseLetter"

Console::WriteLine(Char::IsControl('\t'));   // Вывод: "True"

Console::WriteLine(Char::IsDigit(ch1));    // Вывод: "True"

Console::WriteLine(Char::IsLetter(','));  // Вывод: "False"

Console::WriteLine(Char::IsLetterOrDigit(ch1)); // Вывод: "True"

Console::WriteLine(Char::IsLower('u'));    // Вывод: "True"

Console::WriteLine(Char::IsNumber(ch1));   // Вывод: "True"

Console::WriteLine(Char::IsPunctuation('.')); // Вывод: "True"

Console::WriteLine(Char::IsSeparator(str, 4)); // Вывод: "True"

Console::WriteLine(Char::IsSymbol('+'));   // Вывод: "True"

Console::WriteLine(Char::IsUpper('G'));    // Вывод: "True"

Console::WriteLine(Char::IsWhiteSpace(str, 4)); // Вывод: "True"

Console::WriteLine(Char::Parse("S"));      // Вывод: "S"

Console::WriteLine(Char::ToLower(chA));    // Вывод: "a"

Console::WriteLine(Char::ToUpper('m'));    // Вывод: "M"

Console::WriteLine(Char::ToString('x'));   // Вывод: "x"

Console::WriteLine("{0} {1}", Char::TryParse(st, wch), wch);

                                            // Вывод: "True G"

Console::ReadLine();

return 0;

}

 

 

Строки в стиле C

 

Объявление и инициализация строки.

Объявляется строка также как и массив элементов типа char:

 

char st [7];

 

При инициализации строки можно перечислить символы внутри фигурных скобок:

 

char st[7] = {'S', 't', 'r', 'i', 'n', 'g', '\0' };

 

или указать строку внутри двойных кавычек char:

 

st [7] = " String ";

 

Если размер массива при объявлении не указать, то он будет определен автоматически в соответствии с длиной строки

 

char st[] = "String"; // или  char *st("String");

 

Присваивать строку в двойных кавычках можно только при инициализации. Попытка присвоить строку позже приведет к ошибке.

 

char st [7];

st = " String "; // Ошибка!!!

 

Объявление массива строк выглядит так

 

char st[][20] = { "String1", "String2", "String3" };

std::cout << st[0] << std::endl;  // String1

std::cout << st[l] << std::endl;  // String2

std::cout << st[2] << std::endl;  // String3

 

или так:

 

char *st[] = { "Stringl", "String2", "String3" };

std::cout << st[0] << std::endl;  // Strmg1

std::cout << st[1] << std::endl;  // Stnng2

std::cout << st[2] << std::endl; // Stnng3

 

Доступ к символам внутри строки.

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

 

char st [] = " String ";

std::cout << st[l] << std::endl;      // t

std::cout << *(st + 1) << std::endl; // t

 

Символ можно не только получить таким образом, но и изменить:

 

char st [] = " String ";

st [0] = ' s ';   // Изменение с помощью индекса

*(st + 1) = 'Т';  // Изменение с помощью указателя

std::cout << st << std::endl; // sTring

 

Перебор символов строки.

Выведем все символы строки в прямом и обратном порядке.

 

char st[] = "String";

int len = st:: strlen (st); // Определение длины строки (6)

// Выводим символы в прямом порядке

for (int i = 0; i < len; ++i) {

std::cout << st[i] << std::endl;

}

std:: cout << "-------------------" << std:: endl;

// Выводим символы в обратном порядке

for (int j = len - 1; j >= 0; --j) {

std::cout << st[j] << std::endl;

}

 

Количество символов лучше получать вне цикла или присваивать значение переменной в первом параметре цикла fo r. Например:

 

for (int i = 0, len = std::strlen(st); i < len; ++i) {

 std::cout << st[i] << std::end1;

}

 

Объединение строк.

Для объединения двух строк используется функция streat(). Например:

 

char st 1[40] = "Не стыдно не знать,";

char * st 2(" стыдно не учиться.");

strcat(stl, st2);

cout << stl << endl;

 

Функция streat() возвращает указатель на первый параметр, поэтому последние два оператора предыдущего фрагмента можно заменить одним:

 

cout << strcat(stl, st2) << endl;

 

Пример объединения строки из предыдущего фрагмента с помощью функции strncat().

 

cout << strncat (stl, st 2, 18) << endl;

          // Вывод: Не стыдно не знать, стыдно не учиться

 

Копирование строк.

Копирование строк позволяет выполнять функция str cpу() с двумя параметрами. Например:

 

const size_t LENGTH = 22;

char source[LENGTH] = "Век живи - век учись.";

char destination[LENGTH];

cout << " Целевая строка: " << strcpy(destination, source) << endl;

 

Функция str cpу() копирует строку source в строку destination и возвращает указатель на целевую строку, на экран будет выведено следущее:

 


Поделиться с друзьями:

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.