substr
- это метод класса std::string
.
Вы используете здесь указатели C (char* s
), поэтому нет substr()
для вызова, таким образом, ошибка.
Конечно, я оставлю реализацию вам, но вы можете вдохновиться созданием моего собственного substr .
Поскольку OP демонстрирует добросовестность в попытках сделать свое собственное HW, давайте пока прокомментируем подход:
int mystr(char* s, char* t) {
int counter = 0;
int length = strlen(t);
// while we haven't reach the end of string
while (*s != '\0')
{
// this is not used anywhere, and it's wrong. Why 2? You want the length of `t` there, if you would use it anyway
char d[] = *s.substr(0, 2);
// this is wrong. It will increase the counter,
// every time a character of the substring is matched with the
// current character in the string
if (*s == *t)
counter++;
// you want to read the next chunk of the string, seems good for a start
*s += length;
}
return counter;
}
Итак, теперь вы должны сосредоточиться на том, как проверить, является ли текущийподстрока совпадает в строке.Итак, вам нужно изменить это:
if (*s == *t)
counter++;
на что-то, что будет проверять все символы t
, против того же количества символов строки, с текущей позиции.Итак, вам нужно повторить до *s
.Сколько раз? Для , равной длине t
.
В этой итерации вам необходимо проверить, что текущий символ строки s
равен по сравнению равным к текущему символу строки t
.Когда итерация заканчивается, и если все символы, посещенные во время этой итерации, совпадают, это означает, что вы нашли совпадение!Итак, , если это правда, тогда мы должны увеличить счетчик.
Бонус: если у вас есть время и вы выполнили логикуОбсуждаемое выше, подумайте о *s += length;
и этих входных данных: `s =" dabababd ", t =" ab ".