Я делаю K & R Упражнение 5-4 (p107).
Напишите функцию strend (s, t), которая возвращает 1, если строка t встречается в конце строки s, и ноль в противном случае.
Я подумал, что лучший способ сделать это ... ... 1009 *
- увеличивает оба указателя до конца
- считать в обратном порядке через обе строки, в то время как каждый символ соответствует
- вернуть 1, если мы закончили считать до начала второй строки
Итак, вот что у меня есть ...
int strend(const char *str1, const char *str2) {
int i = 0;
while (*str1++ != '\0');
while (*str2++ != '\0') {
i++;
}
i++;
while (*str2-- == *str1-- && i > 0) {
i--;
}
return (i == 0);
}
Как видите, я использовал счетчик, чтобы узнать, когда я прибыл в начало второй строки.
Есть ли другой цикл, который я могу использовать без счетчика, чтобы сообщить, когда мы достигли начала строки (аналогично поиску \0
для конца строки)?
Спасибо.
Обновление
Не думал использовать указатели - я все еще учусь и кое-что забываю!
Я придумал это ...
int strend(const char *str1, const char *str2) {
char *start = str2;
while (*str1++ != '\0');
while (*str2++ != '\0');
while (*str2-- == *str1--) {
if (str2 == start) {
return 1;
}
}
return 0;
}