Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример. #include <string.h>




 

#include <string.h>

#include <iostream.h>

using namespace std;

void main(){

string str1(“ABCDEFGH”),str2(“”),str3;

char s[]=”Programming”;

cout<<”length of str1: “<<str1.length()<<endl;

// Выводится length of str1: 8

cout<<”size of str1: “<<str1.size()<<endl;

// Выводится size of str1: 8

if(str1.empty())

cout<<”The string str1 is empty”<<endl;

else

cout<<”The string str1 is not empty”<<endl;

// Выводится The string str1 is not empty

if(str2.empty())

cout<<”The string str2 is empty”<<endl;

else

cout<<”The string str2 is not empty”<<endl;

// Выводится The string str2 is empty

str3.assign(str1);

cout<<”str3: “<<str3<<endl;

// Выводится str3: ABCDEFGH

str3.assign(str1,2,4);

cout<<”str3: “<<str3<<endl;

// Выводится str3: CDEF

str3.assign(s,7);

cout<<”str3: “<<str3<<endl;

// Выводится str3: Program

str3.append(“ming”,4);

cout<<”str3: “<<str3<<endl;

// Выводится str3: Programming

str3.append(str1);

cout<<”str3: “<<str3<<endl;

// Выводится str3: ProgrammingABCDEFGH

str1.append(str3,3,5);

cout<<”str1: “<<str1<<endl;

// Выводится str1: ABCDEFGHgramm

str1.swap(str3);

cout<<”str1: “<<str1<<endl;

// Выводится str1: ProgrammingABCDEFGH

cout<<”str3: “<<str3<<endl;

// Выводится str3: ABCDEFGHgramm

str1.erase(11);

cout<<”str1: “<<str1<<endl;

// Выводится str1: Programming

str3.erase(8,5);

cout<<”str3: “<<str3<<endl;

// Выводится str3: ABCDEFGH

str3.insert(2,str1);

cout<<”str3: “<<str3<<endl;

// Выводится str3: ABProgrammingCDEFGH

str1.insert(10,str3,1,2);

cout<<”str1: “<<str1<<endl;

// Выводится str1: ProgramminBPg

str1.replace(10,3,str3,5,1);

cout<<”str1: “<<str1<<endl;

// Выводится str1: Programming

str3.replace(2,13,”CD”,2);

cout<<”str3: “<<str3<<endl;

// Выводится str3: ABCDEFGH

str1.insert(2,str3);

str1.insert(13,str3);

cout<<”str1: “<<str1<<endl;

// Выводится str1: PrABCDEFGHogrABCDEFGHamming

string::size_type p;

p=str1.find(str3);

cout<<”p= “<<p<<endl;

// Выводится p= 2

p=str1.find(str3,3);

cout<<”p= “<<p<<endl;

// Выводится p= 13

p=str1.find(‘A’);

cout<<”p= “<<p<<endl;

// Выводится p= 2

p=str1.find(“CDE”);

cout<<”p= “<<p<<endl;

// Выводится p= 4

p=str1.rfind(str3);

cout<<”p= “<<p<<endl;

// Выводится p= 13

p=str1.rfind(‘A’);

cout<<”p= “<<p<<endl;

// Выводится p= 13

p=str1.rfind(“AB”);

cout<<”p= “<<p<<endl;

// Выводится p= 13

str2=str3.substr(2,4);

cout<<”str2: “<<str2<<endl;

// Выводится str2: CDEF

cout<<”C-string for str3: “<<str3.c_str()<<endl;

// Выводится C-string for str3: ABCDEFGH

}

 

Следующий пример также иллюстрирует применение класса string в C++Builder. Строка отображается в компонентах типа строки редактирования Edit1 и Edit2. Процедура запускается кнопкой Button1.

 

#include <cstring.h>

#include <string.h>

// Обработчик события, возникающего при нажатии

// кнопки "Show"

void __fastcall TForm1::ButtonlClick(TObject *Sender)

{

// Создание экземпляра класса string

string str;

str = "C++ ";

str += "is the best..";

Edit1->Text = str.c_str();// Преобразование к C-строке

// Объявление символьного массива языка С

char buff[30];

strcpy(buff, "Builder C++ ");

strcat(buff, "is the best too.");

int len = strlen(buff);

Edit2->Text = buff;

if (len >= 30)

ShowMessage("Переполнение буфера!!!");

}

 

Метод c_str () возвращает указатель на символьный массив, содержащий копию строки из объекта str. Попытка присваивания значения объекта str свойству Text объекта Edit2 выдала бы ошибку компиляции. Отметим, что при создании экземпляра str не пришлось указывать предельный размер строки. Класс string динамически отводит дополнительную память при необходимости.

В следующем примере для выбора файла открывается диалоговое окно класса TOpenDialog при нажатии кнопки Button2. Имя файла отображаетсяся в объекте Memo1 главной формы Form1. Имя файла затем используется для открытия выбранного файла, ввода строки и ее вывода в объект Memo1.

 

#include <fstream.h>

#include <cstring.h>

void __fastcall TForm1::Button2Click(TObject *Sender){

string str, str1; // Строки будут содержать путь и имя файла

char buf[80];

if (OpenDialog1->Execute())

{

Caption = OpenDialog1->FileName; // полный путь и имя файла

str = OpenDialog1->FileName.c_str();

}

str1=str;

str.insert(0,"Имя файла: ");

Memo1->Lines->Add(str.c_str());

// Вывести в Memo1 путь и имя файла

ifstream in(str1.c_str());

in>>buf;

Memo1->Lines->Add(buf); // Вывести в Memo1 введенную строку

}

 

Класс String из библиотеки VCL. При работе с компонентами VCL часто встречается тип AnsiString для описания строк произвольной длины. Из-за того, что название AnsiString не кажется привлекательным, пользователям C++Builder рекомендуется его синоним – класс String (название начинается с заглавной буквы) Действительно, в файле sysdefs.h, который автоматически включается в заголовки разрабатываемых приложений, можно найти определение тождественности типов

typedef AnsiString String;

Конструкторы класса String позволяют создавать строчные объекты из переменных типа char*, int или даже double. Например:

String str = "Текстовая строка";

Класс String имеет ряд переопределенных операторов присваивания (=), конкатенации (+), сравнения, характерных для строчных классов вообще. При сравнении разнотипных объектов неявное преобразование типа выполняется автоматически:

char* buff = "Текстовая строка";

String str = "Текстовая строка";

if (str == buff) {…} // если строки одинаковые

Класс String инкапсулирует набор методов, которые позволяют реализовать операции над строками. Наиболее часто используются следующие методы:

c_str() – возвращает указатель char* на С-строку, содержащую копию исходной строки.

Length() – возвращает длину строки (число символов в строке).

IsEmpty() – возвращает значение true, если длина строки равна нулю.

Insert() – вставляет текст в указанную позицию строки.

Delete() – удаляет заданное число символов из строки.

Pos() – возвращает индекс начала заданной комбинации символов в строке.

LastDelimiter() – возвращает индекс последнего вхождения в строку заданного символа-ограничителя.

LowerCase() – возвращает измененную исходную строку, символы которой заменяются строчными буквами (приводятся к нижнему регистру).

UpperCase() – возвращает измененную исходную строку, символы которой приводятся к верхнему регистру.

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

Format() – форматирование строки похожее на работу функции sprintf().

ТоInt() – преобразование строки в целое число.

ТоDouble() – преобразование строки в число с плавающей точкой.

SubString() – создает строку, равную некоторой подстроке исходной строки.

Существуют два способа преобразования цифровых строк, вводимых в окна редактирования, в числа:

 

String str;

str = Editl->Text;

int vail = atoi(str.c_str()); // с помощью функции atoi()

int val2 = str.ToInt(); // с помощью метода ToInt()

Отметим особенность класса String: символы строки индексируются начиная с 1 (как в Паскале), а не с 0 (как в C++).

Пример. Создается приложение, позволяющее выполнять сложение двух чисел.

Будем использовать компоненты TEdit, TLabel и TButton.

Используемые свойства и методы:

TEdit: Name (имя объекта), ReadOnly (режим "только чтение"), Text (строка типа String), GetTextLen (длина строки), GetTextBuf (преобразование свойства Text в С-строку).

Используемые свойства и события компонента TButton: Caption (надпись на кнопке), OnClick (событие, действия проводимые при нажатии на кнопку).

Используемое свойство компонента TLabel: Caption (надпись).

Ниже приводится обработчик события нажатия на кнопку:

 

// Unit1.cpp: ------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender){

int Size = Edit1->GetTextLen() + 1;

char *Buffer = new char[Size];

Edit1->GetTextBuf(Buffer,Size);

for(int i = 0; i < Size-1; i++)

if(!isdigit(Buffer[i])&&Buffer[i]!='.') {

Application->MessageBox("Вводите только цифры и точку",

"Ошибка!", MB_OK);

Edit1 -> Text = “”;

return; }

double n = atof(Buffer);

delete[] Buffer;

// Выбрасывается исключение, если в Edit2 введено не число

try

{ double m;

m= Edit2->Text.ToDouble();

Edit3->Text = n+m; }

catch (...){

Application->MessageBox("Ошибка при вводе второго числа",

"Ошибка!", MB_OK);

Edit2 -> Text = “”;

return; }

}

 

На рис. 15 показана форма приложения в процессе выполнения.

 
 

Рис. 15. Результат запуска приложения

 

Работа со строками в текстовых компонентах. Компонент TLabel позволяет создать надпись:

Label1->Font->Color=clRed;

Label1->Caption=“Это красная метка”;

Компонент TEdit представляет собой окно для ввода/вывода строки:

Edit2->Text=Edit1->Text;

Компонент TMemo используется для ввода и вывода нескольких строк:

Memo1->Lines->Strings[i]; // доступ к i-й строке

Свойство Lines содержит ряд методов: Add(), Append() – добавить новую строку; Delete(n) – удалить строку с номером n; SaveToFile(“имя файла”) – сохранить в файле, LoadFromFile(“имя файла”) – загрузить из файла. Например:

Memo1->Lines->Add(Edit1->Text);

Списки – являются производными от двух основных классов: TStringList – строчный список, TList – список объектов общего назначения. Для отображения списков используются компоненты TListBox, TComboBox и другие.

Компонент TListBox – список строк с линейной прокруткой.




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


Дата добавления: 2014-12-27; Просмотров: 595; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.038 сек.