символы и строки

18
Типы символов и строк Типы символов и строк

Transcript of символы и строки

Page 1: символы и строки

Типы символов и строкТипы символов и строк

Page 2: символы и строки

Символьные типы Символьные типы предназначены для хранения одного

символа относятся к целым порядковым типамв C++Builder используются:

символы ANSI (1 байт, char, псевдонимы: AnsiChar и CHAR)

символы Юникод (2 байта, Char , псевдонимы: WideChar и

wchar_t)

Первые 256 символов совпадают

Page 3: символы и строки

С символьными переменными можно обращаться как с целыми и как с символами, все зависит от контекста

Page 4: символы и строки

Например:Например:

char ch = 'Б';Label1->Caption = ch; //вывод в

метку БLabel1->Caption = (unsigned char)ch; //вывод

в метку 193Label1->Caption = (char)(ch + 1); //вывод

в метку Вfor (int i = 1; i < 256; i++) RichEdit1->Lines->Add(IntToStr(i)+'

'+(char)i);//вывод в поле строк вида "193 Б" для всех символов

Page 5: символы и строки

В C++Builder 2009 осуществлен переход на символы и строки Юникод:

Label1->Caption = AnsiString((char)ch);Label1->Caption = AnsiString((char)(ch +

1));RichEdit1->Lines->Add(IntToStr(i)+' '+

AnsiString((char)i));

Page 6: символы и строки

Массивы символовМассивы символов

В классическом C++ отсутствует специальный тип строк

Строки – массивы символов, оканчивающиеся нулевым символом ('\0')

Строка доступна через указатель на первый символ в строке

Page 7: символы и строки

Строка может быть объявлена либо как массив символов, либо как переменная типа char*:

char S[ ] = "строка"; S – массив из 7 элементовchar *Sp = "строка"; Sp – указатель на строку

char buff [100]; buff – строка заданной длины (99)

Доступ к отдельным символам строки выполняется по индексам, начинающимся с нуля

S[0] и Sp[0] — первые символы объявленных выше строк, S[1] и Sp[1] — вторые и т.д.

Page 8: символы и строки

Функции обработки строкФункции обработки строк

strcat — конкатенация (склеивание) двух строк

strcmp — сравнение двух строк strcpy — копирование одной строки в

другую strstr — поиск в строке заданной подстроки strlen — определение длины строки strupr — преобразование символов строки к

верхнему регистру sprintf — построение строки по заданной

строке форматирования и списку аргументов …

Page 9: символы и строки

strcpy(buff, "Текст, копируемый в buff");

char S1[20] = "текст 1", S2[10] = "текст 2";strcat(S1,S2); //результат склеивания в S1

char *S1 = "текст 1", *S2 = "текст 2", S[20];strcat(strcat(strcat(S,S1)," "),S2);

//результат в S

Page 10: символы и строки

Контекстная замена в S1 текста S2 Контекстная замена в S1 текста S2 на текст S3на текст S3char S1[20], S2[20], S3[20], S[60], *St;// операторы занесения текста в S1, S2, S3...St = strstr (S1,S2);if(St){ *St = 0; St += strlen (S2); Label1->Caption =

strcat(strcat(strcpy(S,S1),S3),St);}else Label1->Caption = "Текст не найден";

Page 11: символы и строки

Тип строк AnsiString Тип строк AnsiString

реализован как класс, объявленный в файле vcl/dstring.h

String S;AnsiString S;

это строки с нулевым символом в концепри объявлении инициализируются

пустыми строкамиопределены операции отношения ==, !=,

>, <, >=, <=. сравнение производится с учетом

регистра

Page 12: символы и строки

определены операции присваивания =, += и операция склеивания строк (конкатенации) +

определена операция индексации [ ]индексы начинаются с 1Например: если S1 = "Привет",

то S1[1] вернет 'П', S1[2] вернет 'р' и т.д.

Page 13: символы и строки

Примеры использования методов Примеры использования методов класса класса AnsiStringAnsiString

Label1->Caption = Edit1->Text + ' ' + Edit2->Text;

конкатенация строк

Page 14: символы и строки

Контекстная замена в S1 текста S2 Контекстная замена в S1 текста S2 на текст S3на текст S3AnsiString S1, S2, S3;// операторы занесения текста в S1, S2, S3...int i = S1.Pos(S2);if (i) Label1->Caption = S1.SubString(1,i-1) + S3 + S1.SubString

(i+S2.Length(),255);else Label1->Caption = "Текст не найден";

Page 15: символы и строки

Замена в строке S1 всех Замена в строке S1 всех вхождений S2 на строку S3вхождений S2 на строку S3

Способ 1

int i0 = 0, i = S1.Pos(S2);while(i) { S1 = S1.SubString(1,i + i0 - 1) + S3 + S1.SubString(i + i0 + S2.Length(),255); i0 += i - 1 + S3.Length(); i = S1.SubString(i0 + 1, 255).Pos(S2);}

Page 16: символы и строки

Способ 2

int i0 = 1, i = S1.Pos(S2);while(i > i0){ S1.Delete(i,S2.Length()); // удаление

вхождения S2 S1.Insert(S3,i); // вставка S3 i0 = i + S3.Length(); i = i0 - 1 + S1.SubString(i0, 255).Pos(S2);}

Page 17: символы и строки

Преобразование Преобразование строки AnsiString в строку (char *) строки AnsiString в строку (char *) осуществляется функцией c_str() без

параметров

Например : S1.c_str(); S2.c_str(),

преобразование строк S1 и S2

Page 18: символы и строки

Преобразование Преобразование строки (char *) в строку AnsiStringстроки (char *) в строку AnsiString

функция AnsiString (char *S)