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