Witam, dostałem projekt, w którym muszę wczytać do 20 słów od użytkownika, następnie wygenerować z nich do 1000 słów losowo i umieścić w pliku. Następnie obliczyć liczbę wystąpień każdego ze słów w pliku. Doszedłem do samego końca, niestety mam problem z porównywaniem odczytanego słowa z pliku ze słowami wprowadzonymi przez użytkownika. Chodzi o funkcję ZLICZANIE. Jak można to zrobić?
Z góry dziękuję za pomoc.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct Node
{
int key;
char slowo;
struct Node *next;
}list;
void uzupelnianie(char **tab, int n)
{
for(int i=0;i<n;i++)
{
printf("Wprowadz %d slowo : ",(i+1));
tab[i] = (char*) malloc(n*sizeof(char));
scanf("%s",tab[i]);
}
}
void print(char **tab, int n)
{
for(int i=0;i<n;i++)
{
printf("%d slowo to : %s\n",i+1,tab[i]);
}
}
void ZapisDoPliku(FILE *plik,char **tab, int ile, int n)
{
int x;
for(int i=0;i<ile-1;i++)
{
x=rand()%n;
fprintf(plik,"%s ",tab[x]);
x=0;
}
}
int *zliczanie(char **tab,FILE *plik2,int n,int *wsk)
{
int i=0,j=0,k=0;
char znak;
char slowo[100];
znak=getc(plik2);
while(znak!=EOF)
{
while(znak!=32)
{
slowo[i]=znak;
znak=0;
znak=getc(plik2);
i++;
}
printf("%s\n",slowo);
for(j=0;j<n;j++)
{
if(tab[j]==slowo)(wsk[j])++;
}
for(k=0;k<100;k++)
{
slowo[k]=0;
}
znak=0;
znak=getc(plik2);
i=0;
}
return *wsk;
}
void zeruj(int *wsk, int n)
{
for(int i=0;i<n;i++)
{
wsk[i]=0;
}
}
int main()
{
int n=0,ile=0;
srand(time(NULL));
printf("Ile slow chcesz wpisac? : ");
scanf("%d",&n);
int ilosc[n-1];
int *wsk=ilosc;
zeruj(wsk,n);
char **tab = (char**) malloc(n*sizeof(char*));
int i;
for(i = 0; i < n; i++)
{
tab[i] = (char*) malloc(n*sizeof(char));
tab[i][0] = 0;
}
uzupelnianie(tab,n);
print(tab,n);
ile=rand()%1000;
FILE *plik,*plik2;
plik=fopen("tekst.txt","w");
if(plik==NULL)
{
printf("Nie udalo sie otworzyc pliku tekst.txt");
return 0;
}
ZapisDoPliku(plik,tab,ile,n);
fclose(plik);
plik2=fopen("tekst.txt","r");
if(plik2==NULL)
{
printf("Nie udalo sie otworzyc pliku tekst.txt");
return 0;
}
zliczanie(tab,plik2,n,wsk);
printf("\n\n");
for(int i=0;i<n;i++)
{
printf("%d\n",wsk[i]);
}
return 0;
}