Oppure

Loading
15/12/08 17:03
munkaka
potresti prima leggere tutte le righe del testo e metterle in un array, poi crei un'array che contiene i caratteri trovati
controlla con un ciclo ogni stringa, un carattere alla volta fino alla parentesi, e ogni carattere nuovo lo metti nell'array che contiene i caratteri, la dimensione dell'array sarà il numero di colori. Poi alla fine scorri di nuovo ogni stringa e a ogni carattere fai corrispondere un colore
Ultima modifica effettuata da munkaka 15/12/08 17:04
aaa
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:
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
15/12/08 23:38
mc
DOPPIO
Ultima modifica effettuata da mc 15/12/08 23:42
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:
#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ì:
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