C++ работа со строками, поиск слова в строке, реализация своей собственной функции

Поиск слова 'one' в строке.

#include <iostream>
using namespace std;
int findStr (char *sub, char *str);
int main ( )
{
    cout << findStr ("one", "three onetwo");
    return 0;
}
int findStr (char *sub, char *str){
    char *p, *p1;
    for (int t=0; str[t]; t++){
        // работаем до конца строки в которой ищем
        p = sub; // in p = 'one'
        p1 = &str[t]; // in p1 указатель - строка с позиции t до конца строки
        while (*p && *p == *p1){// пока считывается символы со слова которое мы ищем И посимвольно совпадает символы
                // увеличиваем разряды на следующие
           p++;
           p1++;
        }
        if (!*p) return t; // если дошли до конца слова которое ищем, значит оно есть в строке
    }
    return -1;
}

 

Мы ставим указатель p = &str[t] чтобы проверять очередной проход от конкретной позиции и не выходить за пределы символьного массива.

Можно было делать проверку str[t] str[t+1] str[t+2] но там мы можем выйти за пределы строки, а также нам нужно было бы знать длину слова которого нужно найти.

 

Чтобы вернуть подстроку с которой начинается исходная строка которую мы ищем, включая ее, можно воспользоваться указателями, и возвратить из функции указатель на начала строки если она найдена, для этого укажем функции * что она возвращает указатель:

 

char *findStr (char *sub, char *str);
int main ( )
{
    cout << findStr ("one", "three onetwo");
    return 0;
}

char *findStr (char *sub, char *str){
    char *p, *p1, *start;
    for (int t=0; str[t]; t++){
        // работаем до конца строки в которой ищем
        p = sub; // in p = 'one'
        p1 = &str[t]; // in p1 указатель - строка с позиции t до конца строки
        start = p1;
        while (*p && *p == *p1){// пока считывается символы со слова которое мы ищем И посимвольно совпадает символы
                // увеличиваем разряды на следующие
           p++;
           p1++;
        }
        if (!*p) return start; // если дошли до конца слова которое ищем, значит оно есть в строке
    }
    return 0;
}

 

Программа выдаст "onetwo"



Оставить свой ответ:

Имя:*
E-Mail:
Вопрос:
Skolko buдет пять пдюс сeмь?
Ответ:*
QQpedia21.ru - cамые интересные вопросы