Cod sursa(job #1854312)

Utilizator lorena1999Marginean Lorena lorena1999 Data 22 ianuarie 2017 16:21:02
Problema Potrivirea sirurilor Scor 14
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

ifstream f("strmatch.in");
ofstream g("strmatch.out");

void build_pi(int pi[1001], char sir[1001], char text[1001], int &c, int v_poz[1001])
    {
        int k=0;
        for(int i=0; i<strlen(sir); i++)
            {
                if(sir[i]!=text[k])
                {
                    k=0;
                    pi[i]=k;
                }
                if(sir[i]==text[k])
                {
                    k++;
                    if(k==strlen(text))
                    {
                        pi[i]=k;
                        if(sir[i]==text[0])
                            k=1;
                    }
                    else pi[i]=k;
                }
                if(pi[i]==strlen(text))
                    {
                        c++;
                        v_poz[c]=i-strlen(text)+1;
                    }
            }
    }
int main()
    {
        char text[1001], sir[1001];
        int pi[1001], c=0, v_poz[1001];
        f>>text>>sir;
        build_pi(pi, sir, text, c, v_poz);
        /*for(int i=0; i<strlen(sir); i++)
            cout<<pi[i]<<" ";*/
        g<<c<<endl;
        for(int i=1; i<=c; i++)
            g<<v_poz[i]<<" ";
    }