Answer the question
In order to leave comments, you need to log in
How to return a pointer in a substring search function?
Please tell me how to complete the function.
The task was given to invent your own crutch) A function that would search for a substring in a string and return the position of its first occurrence.
Here is my code that turned out:
int strstr(const char *str, const char *pattern) {
const char *st = str; // присваеваем указателю адрес строки
const char *pa = pattern; //присваеваем указателю адресс паттерна, который будем искать в строке
while (*st){ // начинаем пробегаться по каждой ячейке строки
++st;
if( *st == *pa){ //как только находит символ в строке, который равен первому символу паттерна запускаем цикл
int i = 0; //счётчик итераций, что бы можно было вернуть указатель строки на исходное место
for(i;*st == *pa;i++){ //этим циклом пробегаемся по следующим символам строки и паттерна и проверяем их равенство
++st;
++pa;
} //цикл завершится когда либо паттерн достигнет конца, либо строка. или какие-либо последующие символы не равны
if(*pa == 0){ //если паттерн достиг конца, то получаем позицию вхождения
return st-i; //вот тут не компилируется((
}
pa-i; //сбрасываем паттерн на исходное положение
st-i; // сбрасываем строку на исходное положение
}
}
return -1; //возвращаем -1, если подстрока не была найдена
}
Answer the question
In order to leave comments, you need to log in
st - i is a pointer to the beginning of the matched part of the strings. If you need the position of the first occurrence, then you need to calculate it as the difference between the pointer to the beginning of the original string and the pointer to the beginning of the matching part.
In addition
1) This is clearly not what you want (and not what is written in the comment)
pa-i; //сбрасываем паттерн на исходное положение
st-i; // сбрасываем строку на исходное положение
Will you solve all the tasks from https://stepic.org/ like this?
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question