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

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

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

}

else {

for(j=0; substr[j]==sl[j] && substr[j]; j++) ;

if(!substr[j]) { II Если подстрока обнаружена,

// удаляем ее.

si += j; i—;

}

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

}

}

}

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

Обе функции копируют содержимое левого операнда в объект temp, удаляя любые вхождения подстроки, указанной в правом операнде. В качестве результата возвращается объект класса StrType. Ни один из операндов в ходе вычитания не изменяется. Рассмотрим конкретные примеры вычитания подстрок.

StrType xC'like C++"), у("like");

StrType z;

z = x - у; // Объект z будет содержать строку "I C++".

z = х - "C++"; II Объект z будет содержать строку “I like ".

II Удаление многократных вхождений подстроки, z = "ABCDABCD";

х = z -"А"; II Объект х содержит строку "BCDBCD".

сравнения

Класс StrType предусматривает полный набор перегруженных операторов сравнения строк. Они перечислены в объявлении класса. Повторим их еще раз.

II Сравнение объектов класса StrType.

int operator==(StrType &o) { return !strcmp(p, o.p); }

int operator!=(StrType &o) { return strcmpfp, o.p); } int operator<(StrType &o) { return strcmp(p, o.p) < 0; }

int operator>(StrType &o) { return strcmp(p, o.p) > 0,- }

int operator<=(StrType &o) { return strcmp(p, o.p) <= 0; } int operator>=(StrType &o) { return strcmp(p, o.p) >= 0; }

II Операции над объектами класса StrType и строками,

II взятыми в кавычки.

int operator==(char *s) { return !strcmp(p, s); }

int operator!=(char *s) { return strcmpfp, s); }

int operator<(char *s) { return strcmp(p, s) < 0; }

int operator>(char *s) { return strcmp(p, s) > 0,- }

int operator<=(char *s) { return strcmpfp, s) <= 0; }

int operator>=(char *s) { return strcmpfp, s) >= 0; }

Операции сравнения весьма просты. Их реализация не вызывает никаких затруднений. Однако следует помнить, что левым операндом этих операций обязательно должен быть объект класса StrType. Если вам понадобится использовать в качестве левого операнда операции сравнения строку, заключенную в кавычки, придется добавить новые функции.

Таким образом, приведенные ниже сравнения строк вполне согласуются с определением класса.

StrType х(“one"), y("two"), z("three");

if(x < y) cout « “x меньше y“;

if(z=="three") cout << "z равно three";

У _ n c II .

z = "ne";

if(x==(y+z)} cout « "x равно y+z";

_J Прочие строковые функции

В классе strType определены еще три функции, предназначенные для более тесной интеграции этого класса со средой программирования на языке C++. К ним относятся функции strsizeO, makestr() и функция преобразования типа operator char* (). Вот как выглядят их определения.

int strsizeO { return strlen(p); } // Возвращает размер строки,

void makestr(char *s) { strcpy(s, p); } // Создает строку,

II взятую в кавычки, operator char *(){ return p; } II Преобраз в тип char *.