Читать «Полный справочник по С++» онлайн - страница 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