Итак, окончательная версия программы. Отладочная печать оставлена, чтобы можно было проследить, как это работает. Поправка, которую необходимо было сделать, чтобы программа работала корректно: в функции поиска оператор p2=psh; нужно поставить перед оператором
if(*p1==*p2){cout<<*p1<<" "<<n1<<endl; (т.к. мы портили указатель p2 и дальнейшее сравнение было некорректным). Под этой версией расписаны отдельные шаги, которые могут повторить те, у кого что-то не получилось (правда, имена переменных несколько другие - это шпаргалка, в которую я не подглядывала).
Окончательная версия программы
Заголовочный файл head.h
#include <iostream>
#include <string.h>
using namespace std;
int vvsh(char sh[]);
int poisk(char* pstr,char* psh,int nsh);
main.cpp
#include "head.h"
void main(){
char str[]="moja mama varit mamalygu na balkone";
char shablon[10];
int nsh=vvsh(shablon);
cout << "dlina= "<< nsh << endl;
puts(shablon);
char* pstr=str;
char* psh=shablon;
int nn=poisk(pstr,psh,nsh);
cout << "mesto shablona= "<< nn << endl;
cout << "biblio function= "<<strstr(str,shablon)-str<< endl;
}
/*
Написать программу с функцией поиска первого вхождения шаблона в текст. В качестве
первого параметра функция принимает указатель на строку, в которой нужно искать шаблон. В
качестве второго параметра указатель на строку-шаблон, которую нужно найти. Функция
возвращает позицию первого вхождения строки-шаблона, если он присутствует в строке
(помните, что в C++ принято считать с 0), и -1, если шаблона в тексте нет. В основной
программе инициализировать строку при описании, строку-шаблон вводить с клавиатуры.
Проверить правильность работы написанной функции с помощью функции strstr(s1,s2) из
библиотеки <string.h>
Контрольный пример:
Строка "moja mama varit mamalygu na balkone"
Шаблоны: "mama" , "mamalygu"
*/
vvod.cpp
#include "head.h"
int vvsh(char sh[])
{
cout<<"vvedite shablon ";
gets(sh);
return strlen(sh);
}
poisk.cpp
#include "head.h"
int poisk(char* pstr,char* psh,int nsh)
{
char* p1=pstr; char* p11;
char* p2=psh;
int n1=0,nn=-1,n2;
if(*p2==0) return n1;
while(*p1!=0)
{
p2=psh;
if(*p1==*p2){cout<<*p1<<" "<<n1<<endl;
p11=p1; n2=0;
while(n2<nsh && *p11==*p2){p11++; p2++; n2++; cout<<*p11<<" "<<*p2<<" | ";} cout<<endl;
if(*p2==0) return n1;
}
p1++;
n1++;
}
return nn;
}
Отладка программы по шагам: