Читать «Полный справочник по С++» онлайн - страница 434

Герберт Шилдт

II объекту класса StrType.

StrType StrType::operator=(char *s)

{

int len = strlen(s) + 1,-if(size < len) { delete [] p; try {

p = new char[len];

} catch (bad_alloc xa) {

cout << "Ошибка при распределении памяти\п"; exit(1);

}

size = len;

}

strcpy(p, s); return *this;

II Конкатенация двух объектов класса StrType. StrType StrType::operator+(StrType &o)

{

int len;

StrType temp;

delete [] temp.p;

len = strlen(o.p) + strlen(p) + 1; temp.size = len; try {

temp.p = new char[len];

} catch (bad_alloc xa) {

cout << "Ошибка при распределении памяти\п"; exit(l);

}

strcpy(temp.p, p); strcat(temp.p, o.p); return temp;

}

II Конкатенация объекта класса StrType II и строки-, взятой в кавычки.

StrType StrType::operator+(char *s)

{

int len;

StrType temp;

delete [] temp.p;

len = strlen(s) + strlen(p) + 1; temp.size = len; try {

temp.p = new char[len];

} catch (bad_alloc xa) {

cout « "Ошибка при распределении памяти\п“,-exit(1);

}

strcpy(temp.p, p); strcat(temp.p, s) ; return temp;

}

II Конкатенация строки, взятой в кавычки,

II с объктом класса StrType.

StrType operator+(char *s, StrType &o)

{

int len;

StrType temp;

delete [] temp.p;

len = strlen(s) + strlen(o.p) + 1; temp.size = len; try {

temp.p = new char [len] ,-} catch (bad_alloc xa) {

cout « "Ошибка при распределении памяти\п“; exit(1);

}

strcpy(temp.p, s); strcat(temp.p, o.p); return temp;

}

// Вычитание подстроки из объекта класса StrType.

StrType StrType::operator-(StrType &substr)

{

StrType temp(p); char *sl; int i, j;

si = p;

for(i=0; *sl; i++) {

if(*sl!=*substr.p) { II Если символ не является

II первой буквой подстроки, temp.p[i] = *sl; II копируем его в объект temp. sl++ ;

}

else {

for(j=0; substr.p[j]==sl[j] && substr.p[j]; j++) ; if(!substr.p[j]) { II Если подстрока обнаружена, II удаляем ее.

si += j; i--;

}

else { II Если нет, продолжаем копирование. temp.p[i] = *sl; sl++;

}

}

}

temp.p[i] = '\0 1 ; return temp;

}

II Вычитание строки, взятой в кавычки, из II объекта класса StrType.

StrType StrType::operator-(char *substr)

{

StrType temp(p); char *sl; int i, j;

si = p;

for(i=0; *sl; i++) {

if(*sl!=*substr) { II Если символ не является II первой буквой подстроки, temp.p[i] = *sl; II копируем его в объект temp. sl++;

}

else {

for(j=0; substr[j]==sl[j] && substr[j]; j++) ; if(!substr[j]) { II Если подстрока обнаружена,

II удаляем ее.

si += j; i—;

}

else { // Если нет, продолжаем копирование. temp.p[i] = *sl; sl++;

}

}

}

temp.p[i] = '\0'; return temp;

}

int main()

(

StrType si("Работа со строковыми объектами.\n");

StrType s2(sl);

StrType s3; char s[8 0] ;

cout « si « s2;

s3 = si; cout « si;

s3.makestr(s);

cout « "Преобразование в строку: " « s;

s2 = " Это — новая строка . " ; cout << s2 << endl,-

StrType s4(0 И эта тоже.");

si = s2+s4;

cout « si << endl;

if(s2==s3) cout « "Строки равны.\n"; if(s2!=s3) cout « "Строки не равны.\n°; if(sl<s4) cout « "Строка si меньше строки s4\n“,-

if(sl>s4) cout << "Строка si больше строки s4\n";

if(sl<=s4) cout << "Строка si меньше или равна строке s4\n