символы и строки
TRANSCRIPT
Типы символов и строкТипы символов и строк
Символьные типы Символьные типы предназначены для хранения одного
символа относятся к целым порядковым типамв C++Builder используются:
символы ANSI (1 байт, char, псевдонимы: AnsiChar и CHAR)
символы Юникод (2 байта, Char , псевдонимы: WideChar и
wchar_t)
Первые 256 символов совпадают
С символьными переменными можно обращаться как с целыми и как с символами, все зависит от контекста
Например:Например:
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 Б" для всех символов
В C++Builder 2009 осуществлен переход на символы и строки Юникод:
Label1->Caption = AnsiString((char)ch);Label1->Caption = AnsiString((char)(ch +
1));RichEdit1->Lines->Add(IntToStr(i)+' '+
AnsiString((char)i));
Массивы символовМассивы символов
В классическом C++ отсутствует специальный тип строк
Строки – массивы символов, оканчивающиеся нулевым символом ('\0')
Строка доступна через указатель на первый символ в строке
Строка может быть объявлена либо как массив символов, либо как переменная типа char*:
char S[ ] = "строка"; S – массив из 7 элементовchar *Sp = "строка"; Sp – указатель на строку
char buff [100]; buff – строка заданной длины (99)
Доступ к отдельным символам строки выполняется по индексам, начинающимся с нуля
S[0] и Sp[0] — первые символы объявленных выше строк, S[1] и Sp[1] — вторые и т.д.
Функции обработки строкФункции обработки строк
strcat — конкатенация (склеивание) двух строк
strcmp — сравнение двух строк strcpy — копирование одной строки в
другую strstr — поиск в строке заданной подстроки strlen — определение длины строки strupr — преобразование символов строки к
верхнему регистру sprintf — построение строки по заданной
строке форматирования и списку аргументов …
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
Контекстная замена в 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 = "Текст не найден";
Тип строк AnsiString Тип строк AnsiString
реализован как класс, объявленный в файле vcl/dstring.h
String S;AnsiString S;
это строки с нулевым символом в концепри объявлении инициализируются
пустыми строкамиопределены операции отношения ==, !=,
>, <, >=, <=. сравнение производится с учетом
регистра
определены операции присваивания =, += и операция склеивания строк (конкатенации) +
определена операция индексации [ ]индексы начинаются с 1Например: если S1 = "Привет",
то S1[1] вернет 'П', S1[2] вернет 'р' и т.д.
Примеры использования методов Примеры использования методов класса класса AnsiStringAnsiString
Label1->Caption = Edit1->Text + ' ' + Edit2->Text;
конкатенация строк
Контекстная замена в 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 = "Текст не найден";
Замена в строке 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);}
Способ 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);}
Преобразование Преобразование строки AnsiString в строку (char *) строки AnsiString в строку (char *) осуществляется функцией c_str() без
параметров
Например : S1.c_str(); S2.c_str(),
преобразование строк S1 и S2
Преобразование Преобразование строки (char *) в строку AnsiStringстроки (char *) в строку AnsiString
функция AnsiString (char *S)