Лабораторная работа №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.
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;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.