E
E
Evsign2014-09-26 18:39:40
C++ / C#
Evsign, 2014-09-26 18:39:40

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, если подстрока не была найдена
}

The problem is that it doesn't compile. char cannot be subtracted from int. What type to make i so that it could be subtracted from char?
char i = 0; probyval. For some reason the same error occurs. invalid conversion from 'const char*' to 'int'
And please check my logic)) Is everything correct?)

Answer the question

In order to leave comments, you need to log in

2 answer(s)
L
Lolshto, 2014-09-26
@Evsign

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; // сбрасываем строку на исходное положение

2) Read about algorithms for finding a substring in a string

D
drozdVadym, 2014-09-27
@drozdVadym

Will you solve all the tasks from https://stepic.org/ like this?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question