Pagini recente » Cod sursa (job #657502) | Cod sursa (job #3155962) | Cod sursa (job #217408) | Cod sursa (job #54394) | Cod sursa (job #1060107)
#include <iostream>
#include <string.h>
#include <fstream>
#define Nmax 2000009
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char t[Nmax],p[Nmax];
int v[Nmax];
int i=-1,n,m,j,poz,k=0;
int main()
{
f.getline(p,Nmax);
f.getline(t,Nmax);
n=strlen(t)-1;
m=strlen(p)-1;
if (!m)
{
for(i=0;i<=n;++i)
if (t[i]==p[m]){++k;v[k]=i;}
}
else if(m==n)
{
bool logical=true;
for(i=0;i<=n;++i)
if (t[i]!=p[i]) logical=false;
if (logical) v[++k]=0;
}
else
{
bool start=0;
do
{
++i;
if ((t[i]==p[0]) && (!start))
{
start=true;
j=1;
poz=i;
}
else if ((start) && (t[i]==p[j]))
{
if (j==m) {++k;v[k]=poz;start=false;--i;}
else ++j;
}
else if ((start) && (t[i]!=p[j])) {start=false;--i;}
}
while(i<n-m+1);
}
g<<k<<"\n";
for(i=1;i<=k;++i)
g<<v[i]<<" ";
return 0;
}