Newsgroup: it.comp.lang.c
Titolo: Confornto fra stringhe (entro mercoledi sera)

Allora io sono sempre quello del programma che confronta le stringhe ma
con mio disappunto non riesco ad arrivarci in fondo...Io dovrei
realizzare un programma che riceve in ingresso due file di testo e li
apre in lettura. Per ogni riga del primo file deve contare quente volte
compare al suo interno la stringa presente nella riga di uguale
posizione del secondo file. Infine scrivere i risultati in
corrispondenti righe di un file di output. Allora io arrivo a leggere le
righe dei due files (grazie realknip)ma poi non sono in grado di operare
il confronto parola per parola. Es. prima riga primo file: mi chiamo
giovanni-----prima riga secondo file: il mio nome è giovanni-----terzo
file prima riga: giovanni compare una volta.Se qualcuno mi potesse dare
una mano gliene sarei grato (possibilmente entro mercoledi sera).
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLENGTH 100
int conta (char *, char *);
void inserisci(int, char *, char *, FILE *);
int main ()
{
int count;
char nomefile1[_MAX_PATH+_MAX_FNAME];
char nomefile2[_MAX_PATH+_MAX_FNAME];
char nomefile3[_MAX_PATH+_MAX_FNAME];
char riga1[MAXLENGTH];
char riga2[MAXLENGTH];
char * buf1;
char * buf2;
const n=100;
FILE * file1;
FILE * file2;
FILE * file3;
//carica i dati di input
printf("inserisci il nome del primo file origine:");
gets(nomefile1);
printf("scrivi il nome del secondo file origine:");
gets(nomefile2);
printf("inserisci il nome del file destinazione:");
gets(nomefile3);
//apre i files
if ((file1=fopen(nomefile1,"r"))==NULL)
{
printf("Il primo file non esiste \n");
return (-1);
}
if ((file2=fopen(nomefile2,"r"))==NULL)
{
printf ("Il secondo file non esiste\n");
return (-1);
}
if ((file3=fopen(nomefile3,"a"))==NULL)
{
printf ("impossibile aprire il file di output\n");
return (-1);
}
//legge le prime 2 righe
buf1 = fgets(riga1, MAXLENGTH, file1);
buf2 = fgets(riga2, MAXLENGTH, file2);
//legge tutte le altre righe
while (1)
{
if (buf1 == 0 || buf2 == 0)
{
break;
}
count = conta(riga1, riga2);
if (count != 0)
{
inserisci(count, riga1, riga2, file3);
}
buf1 = fgets(riga1, MAXLENGTH, file1);
buf2 = fgets(riga2, MAXLENGTH, file2);
}
//chiude tutto e saluta
fclose(file1);
fclose(file2);
fclose(file3);
return 0;
}
int conta (int n,char * riga1, char *riga2)
{
//questa funzione deve ritornare il numero di volte
//in cui riga1 e' contenuta in riga2
return 0;
}
void inserisci(int count, char * riga1, char * riga2, FILE * file3)
{
//questa funzione scrive un output formattato in file3
//del tipo "ho trovato count volte "riga1" nel secondo file 
return;
}
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:131555aedbdd830a41f...@mygate.mailgate.org...

Usa la funzione standard strcmp (#include<string.h>)

Lo so che devo usare strstr ma se ad esempio confonto due righe riesco
ad ottenere una stampa sul terzo file solo se sono identiche....se
potessi farmi un esempio, grazie


 ha scritto nel messaggio
news:f648cd046edf1f570d7...@mygate.mailgate.org...

leggi le parole da una riga del primo file le metti in un array di
stringhe...poi fai lo stesso sul secondo....ti costruisci una funzione che
confronta parola per parola aggiornando di volta in volta un array di
contatori di occorrenze....poi stampi sul terzo file....loop...
Tu leggi tutta una riga dai file...devi leggere parola per parola oppure
leggi tutta la riga e fai un parsing che la suddivida in parole....insomma
ci sono una decina di modi diversi per fare sta cosa

Ti avevo mandato un programma che faceva quello che volevi ... che problemi
hai avuto dopo? Non andava :)
Ciao
Alessio C