У меня есть 50 файлов, по которым я должен выполнить поиск по слову, и напечатать, сколько раз это слово существует в каждом файле
, поэтому я сделал эту функцию, чтобы проверить, является ли слово подстрокой слова
int isSub(char s1[],char s2[])
{
int M = strlen(s1);
int N = strlen(s2);
int i,j ;
for (i= 0; i <= N - M; i++) {
for (j = 0; j < M; j++){
if (s2[i + j] != s1[j]){
break;
}
}
if (j == M){
return i;
}
}
return -1;
}
Я сделал модульный тест для этой функции, и она отлично работает, но когда я использую его в своем коде, он не работает, как я ожидал
, и вот мой основной
int main(int argc, char * argv[])
{
int my_rank; /* rank of process */
int p; /* number of process */
int source; /* rank of sender */
int dest; /* rank of receiver */
int tag = 0; /* tag for messages */
MPI_Status status; /* return status for */
MPI_Init( &argc, &argv );
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &p);
int i,j,k,temp;
int avg,extra,taken,finalResult;
char query[100];
char b[6];
char a[100];
char line[500];
char found[500][128];
int sum;
int start[100];
int end[100];
int istart,iend;
avg=50/p;
extra=50%p;
if (my_rank==0)
{
printf("Query: ");
scanf("%[^\n]%*c",query);
sum=0;
temp=0;
for(i=0; i<p; i++)
{
taken=(extra--<=0)? avg: avg+1;
start[i]=temp;
temp+=taken;
end[i]=temp;
}
}
MPI_Bcast(&sum, 1, MPI_INT, 0, MPI_COMM_WORLD);
MPI_Bcast(&query, strlen(query), MPI_CHAR, 0, MPI_COMM_WORLD);
MPI_Scatter(&start, 1, MPI_INT, &istart, 1, MPI_INT, 0,MPI_COMM_WORLD);
MPI_Scatter(&end, 1, MPI_INT, &iend, 1, MPI_INT, 0,MPI_COMM_WORLD);
int counter=0;
for (i=istart; i<iend; i++)
{
strcpy(b,"");
strcpy(a,"Aristo-Mini-Corpus P-");
sprintf(b,"%d",i+1);
strcat(b,".txt");
strcat(a,b);
if((i+1)>50)
break;
FILE *read=fopen(a,"r");
if(read == NULL)
{
perror("Unable to open file!");
printf("%s \n",a);
exit(1);
}
else
{
counter=0;
while(fgets(line, sizeof(line), read) != NULL)
{
if (isSub(query,line)!=-1)
{
counter++;
}
}
printf("%d \n",counter);
sum+=counter;
}
fclose(read);
}
MPI_Reduce(&sum, &finalResult, 1, MPI_INT, MPI_SUM, 0,MPI_COMM_WORLD);
if (my_rank==0)
{
printf("%d\n",finalResult);
}
/* shutdown MPI */
MPI_Finalize();
return 0;
}
, когда я Запустив этот код, я обнаружил, что первые 10 файлов работают нормально и печатаются правильно, но другие 40 не работают должным образом, и выведите 30 «30 - это количество строк в каждом файле» *
Любые подсказки ??