15/12/08 23:38
mc
Perchè complichi così le cose ?
Scriviti una funzione che estrae una sottostringa, poi utilizzi quella funzione su le varie righe.
Non mischiare tutto in un unica funzione ...
Ecco la funzione, per estrarre una sottostringa, compresa tra due delimitatori:
Poi usi la seguende funzione per estarre le sottostringhe in ogni linea:
Scriviti una funzione che estrae una sottostringa, poi utilizzi quella funzione su le varie righe.
Non mischiare tutto in un unica funzione ...
Ecco la funzione, per estrarre una sottostringa, compresa tra due delimitatori:
char *substr(const char *string, char delim1, char delim2){ char *substr = NULL; if((substr = malloc(strlen(string) * sizeof(char))) == NULL){ puts("Errore di memoria"); exit(1); } while(*string){ if(*string == delim1){ while(*string != delim2 && *string != 'Perchè complichi così le cose ?
Scriviti una funzione che estrae una sottostringa, poi utilizzi quella funzione su le varie righe.
Non mischiare tutto in un unica funzione ...
Ecco la funzione, per estrarre una sottostringa, compresa tra due delimitatori:char *substr(const char *string, char delim1, char delim2){ char *substr = NULL; if((substr = malloc(strlen(string) * sizeof(char))) == NULL){ puts("Errore di memoria"); exit(1); } while(*string){ if(*string == delim1){ while(*string != delim2 && *string != '{parsed_message}') *substr++ = *string++; return substr; } string++; } return substr; }
Poi usi la seguende funzione per estarre le sottostringhe in ogni linea:char linea1[50] = /*blablabla*/; char linea2[50] = /*blablabla*/; char *substr1 = substr(linea1, '(', ')'); char *substr2 = substr(linea2, '(', ')'); /*Confronti Vari ed eventuali*/') *substr++ = *string++; return substr; } string++; } return substr; }
Poi usi la seguende funzione per estarre le sottostringhe in ogni linea:
char linea1[50] = /*blablabla*/; char linea2[50] = /*blablabla*/; char *substr1 = substr(linea1, '(', ')'); char *substr2 = substr(linea2, '(', ')'); /*Confronti Vari ed eventuali*/
Ultima modifica effettuata da mc 15/12/08 23:43
aaa
17/12/08 18:55
feddur
ok.. faccio le cose una alla volta..
ora vorrei fare la funzione che memorizza il file in un array di stringhe, sono arrivato fin qua ma non riesco ad andare avanti:
come faccio a inserire string[300]?
ora vorrei fare la funzione che memorizza il file in un array di stringhe, sono arrivato fin qua ma non riesco ad andare avanti:
#include <stdio.h> #include <iostream> #include <fstream> #include <string.h> #include <stdio.h> void memorizza(int j, char string[300]); int main(void) { int i = 0; char stringa[300]; FILE *leggoinput; if ((leggoinput = fopen("file.txt", "r")) != NULL) { while(!feof(leggoinput)) { fgets(stringa, 300, leggoinput); //printf("==>%s", stringa); memorizza(i, stringa); i++; } } printf("\n ***Terminato***\n"); system("PAUSE"); return(0); } void memorizza(int j, char string[300]) { char dialog[j][300]; dialog[j][string]; }
come faccio a inserire string[300]?
aaa
17/12/08 19:11
mc
Semmai il ciclo di lettura lo metti nella funzione memorizza ...
Una cosa così:
Così leggi n righe, non più di 50, e le memorizzi in un array di puntatori (ricordati di liberare la memoria).
Poi passi riga per riga, e fai i vari controlli.
Una cosa così:
int memorizza(char *where[], int numero_byte_riga, int numero_linee); int main(void){ FILE *fp = NULL char *lines[50]; const int numero_byte_per_riga = 300; int numero_righe_lette = 0; /*... Apri file ...*/ numero_righe_lette = memorizza(fp, lines, numero_byte_per_riga, 50); /*... Elaborazione ...*/ return 0; } /*Legge numero_linee da file fp*/ int memorizza(FILE *fp, char *where[], int numero_byte_riga, int numero_linee){ int i; for(i = 0; i < numero_linee && !feof(fp); i++){ where[i] = malloc(numero_byte_riga * sizeof(char)); assert(where[i] != NULL); fgets(where[i], numero_byte_riga - 1, fp); } return i; }
Così leggi n righe, non più di 50, e le memorizzi in un array di puntatori (ricordati di liberare la memoria).
Poi passi riga per riga, e fai i vari controlli.
aaa