Разработка и реализация программ, которая позволяет совершить контактирование стрингов при помощи символа +

Страницы работы

Содержание работы

Лабораторная работа №7

Тема:    Разработка и реализация программ, которая позволяет совершить контактирование стрингов при помощи символа +.

Цель:    овладеть навыками составления программы, которая позволяет совершать контактирование стрингов при помощи символа + и выполнить её в IDE Borland C++ 5.0.

Задания

1.  Составить программу, которая могла б демонстрировать функцию, которая совершает контактирование стрингов при помощи символа + .

Короткі теоретичні відомості

Є спеціальний випадок, коли передостаннім символом нового рядка перебуває символ похилої риси вліво (\). У такому випадку символи похилої риси вліво й символ нового рядка відкидаються, що дозволяє розглядати два фізичні рядки тексту як єдине ціле.

Конкатенація (об'єднання) рядків

charstrl[10]= "Hello";

char str2[ 10]="World!";

char* str3;

str3=strl+str2;

Якщо відповідь - помилка на етапі компіляції, що в str3 буде зберігається рядок "HelloWorld!", але насправді це не так. Не можна складати покажчики (і імена масивів).

Для конкатенації варто використати функції.

Є дві спеціальні функції:

char* strcat(char* dest, const char* source)

char* strncat(char* dest, const char* source, size_t size)

Ці функції додають до рядка, на яку вказує dest, символи з рядка source. Перша версія додає всі символи до нуль-термінатора, друга - максимум size символів. Результуючий рядок завершується нуль-термінатором.

Перетворення рядків

Найчастіше потрібно перетворити число в рядок і навпаки. Є кілька способів зробити це. По-перше, такі перетворення зовсім нескладно робити самостійно. По-друге, можна використати функції sprintf і sscanf. Наприклад, так:

char str[50]; int i=15;

int j;

sprintf(str, "%d", i); // Записати в str строкове подання і

sscanf(str, "%d", &j); // Записати в jчисло, що втримується в рядку str

sprintf(str,"i-%dandj=%d",i,j); //уміст "i=l5 and j-15"

Хоча sprintf і sscanf досить зручні, у них є кілька недоліків. По-перше, вони не завжди швидко працюють, по-друге небезпечні. Наприклад, якщо в рядку формату ви вкажіть, що передаєте два цілих, а замість цього передасте два double, помилка виявиться тільки при виконанні програми й знайти її причину буде не так-то просто. По-третє, доступно ціле сімейство функцій atof, atoi, atol і itoa, ltoa. Всі вони дуже схоже між собою. Функції з першої групи перетворять рядок у число (float, int або long) залежно від закінчення. Функції із другої групи виконують зворотне перетворення. Повинен помітити, що функції із другої групи (так само як і раніше згадана stricmp) не входять у стандарт, однак вони досить зручні й доступні на деяких платформах. Прототипи функцій з першої групи:

double atof(const char* string);

int atoi(const char* string);

long atol(const char* string);

Друга група:

char* itoa(int value, char* string, int radix);

char* ltoa(long value, char* string, int radix);

Функції із другої групи можуть створювати строкове подання чисел у будь-якій системі (по будь-якій підставі) від 2 до 36. Підстава передається в третьому параметрі. Щоб одержати строкове подання числа в десятковій системі, передайте 10.

Задание 1

class s1

{

public:

virtual void printString(string str){cout<<str<<ndl;}

}

class s2: public virtual s1

{

protected:

int num; private:

char* S; // Строка

int len; // Длинна строки

public:

void s2()

{

cout<<"I am default constructor of s2"<<endl;

}

void s2(int _num)

{

num=_num;

cout<<"I am the second constructor of s2"<<endl;

}

void printString(char* str)

{

cout<<"I am printString fiinction"<<endl;

cout<<str<<endl;

}

string operator+(const string &str)

{  // Функция сцепления строк

string s; // Создание временного объекта

delete [] s.S; // Удаление старой строки

s.len = len + str.len; // Вычисление новой длинны строки

s.S = new char [s.len +1]; // Выделение памяти под новую строку

strcpy(s.S, S); // Инициализация первой части строки

strcat(s.S, str.S); // Инициализация второй части строки

return s; // Возврат нового объекта

}

}

class s3

{

Public:

void someFunct()

{

cout<<"Class s3-> someFunct"<<endl;

}

friend class s2;

}

void main

{

s2 ss;

}

Похожие материалы

Информация о работе