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"
Оставить свой ответ: