Pagini recente » Cod sursa (job #2773451) | Cod sursa (job #1076526) | Cod sursa (job #2711520) | Cod sursa (job #669365) | Cod sursa (job #1287395)
#include <fstream>
#include <vector>
#include <string>
using namespace std;
const char NUME_FISIER_INTRARE[] = "strmatch.in";
const char NUME_FISIER_IESIRE[] = "strmatch.out";
const int MAX_NR_POZITII = 1000;
struct DateIntrare{
string *str1;
string *str2;
void aloca(){
str1 = new string();
str2 = new string();
}
void sterge(){
delete str1;
delete str2;
}
};
struct DateIesire{
int n;
vector<int> *pozitii;
void initializeaza(){
n = 0;
pozitii = new vector<int>(MAX_NR_POZITII);
}
void sterge(){
delete pozitii;
}
void adaugaSolutie(int pozitie){
if(n < MAX_NR_POZITII){
(*pozitii)[n++] = pozitie;
}else{
n++;
}
}
};
DateIntrare citesteDate(const char filename[]){
DateIntrare date_intrare;
date_intrare.aloca();
ifstream fin(filename);
fin >> (*date_intrare.str1);
fin >> (*date_intrare.str2);
fin.close();
return date_intrare;
}
DateIesire strMatch(const DateIntrare &date_intrare){
int n = (*date_intrare.str1).size();
int m = (*date_intrare.str2).size();
DateIesire date_iesire;
date_iesire.initializeaza();
for(int i = 0; i < (m - n + 1); ++i){
int j = 0;
while((*date_intrare.str1)[j] == (*date_intrare.str2)[i+j] && j < n) {++j;}
if(j == n){
date_iesire.adaugaSolutie(i);
}
}
return date_iesire;
}
void scrieDate(const DateIesire &date_iesire, const char filename[]){
ofstream fout(filename);
fout << date_iesire.n << "\n";
for(int i = 0; i < date_iesire.n; ++i){
fout << (*date_iesire.pozitii)[i] << " ";
}
fout.close();
}
int main(int argc, char *argv[]){
DateIntrare date_intrare;
DateIesire date_iesire;
date_intrare = citesteDate(NUME_FISIER_INTRARE);
date_iesire = strMatch(date_intrare);
scrieDate(date_iesire, NUME_FISIER_IESIRE);
date_intrare.sterge();
date_iesire.sterge();
return 0;
}