#4 KIIV
Je to semestrální práce do školy a budeme to pak přepisovat pro paralelní spracování a doporučovali nám, že se máme vyhnout strukturám jako je string a podobným vymoženostem. :)
Posílám víc kódu
#include <iostream>
#include <stdio.h>
using namespace std;
int searchInStr(char*, char*);
bool testString(char*, char**, int, int*);
void printResult(char*, char**, int, int*);
bool loadStrSet(char**&,int*);
void reallocStrSet(char** , int *, int);
void reallocStr(char* &, int *, int);
int main()
{
//testování
char** superStrings=new char*[1]; // zkoumané nadřetězce
superStrings[0]=new char[30];
superStrings[0][0]='1';
superStrings[0][1]='0';
superStrings[0][2]='1';
superStrings[0][3]='0';
superStrings[0][4]='0';
superStrings[0][5]='1';
superStrings[0][6]='0';
superStrings[0][7]='0';
superStrings[0][8]='1';
superStrings[0][9]='0';
superStrings[0][10]='1';
superStrings[0][11]='0';
superStrings[0][12]='1';
superStrings[0][13]='0';
superStrings[0][14]='0';
superStrings[0][15]='0';
superStrings[0][16]='1';
superStrings[0][17]='0';
superStrings[0][18]='0';
superStrings[0][19]='1';
superStrings[0][20]='0';
superStrings[0][21]='0';
superStrings[0][22]='1';
superStrings[0][23]='1';
superStrings[0][24]='2';
char** strSetData=NULL;
int size=0;
if(!loadStrSet(strSetData,&size)) {
cout << "Loading file failed!" << endl;
return 0;
}
int* searched=new int[size];
for(int i=0;i<1;i++) {
if(testString(superStrings[i], strSetData, size, searched)) {
cout << "nalezeno" << endl;
printResult(superStrings[i], strSetData, size, searched);
}
else cout << "nenalezeno" << endl;
}
delete[] superStrings[0];
delete[] superStrings;
for(int i=0;i<size;i++) {
// cout << strSetData[i] << endl;
delete[] strSetData[i];
}
delete[] strSetData;
return 0;
}
//...
bool loadStrSet(char** &strSetData, int* size) {
cout << "Loading file ...";
*size=50;
int sizeItem=10;
FILE * file=0;
char ch;
int line=0;
int i=0;
file=fopen("strset.txt","r");
if(file!=NULL) {
strSetData=new char*[*size];
strSetData[line]=new char[sizeItem];
while((ch=fgetc(file))!=EOF) {
if(ch=='\n') {
strSetData[line][i++]='2'; //end of the line - není třeba realokovat pole, je to poslední znak
if((++line)==*size){
reallocStrSet(strSetData,size,(2*(*size)));
if(strSetData==0) {
cout << " failed (realloc error)!" << endl;
return false;
}
}
//sizeItem=10;
i=0;
strSetData[line]=new char[sizeItem]; // zde se to pokazí, když se řádek předtím realokovalo
}
if(ch=='0' || ch=='1') {
strSetData[line][i++]=ch;
if(i==sizeItem) {
reallocStr(strSetData[line],&sizeItem,2*sizeItem);
if(strSetData[line]!=0) {
sizeItem=2*sizeItem;
} else {
cout << " failed (realloc error)!" << endl;
return false;
}
}
}
}
strSetData[line][i]='2';
*size=line+1;
cout << "done" << endl;
return true;
} else {
cout << " failed!" << endl;
return false;
}
}
void reallocStrSet(char** p, int* actSize, int newSize) {
char** tmp=new char*[newSize];
for(int i=0;i<*actSize;i++)
tmp[i]=p[i];
delete[] p;
p=tmp;
*actSize=newSize;
}
void reallocStr(char* &p, int* actSize, int newSize) {
char* tmp=new char[newSize];
for(int i=0;i<*actSize;i++)
tmp[i]=p[i];
delete[] p;
p=tmp;
*actSize=newSize;
}