Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - funzione che non va..
Forum - C/C++ - funzione che non va.. - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
mc (Normal User)
Rookie


Messaggi: 52
Iscritto: 04/12/2008

Segnala al moderatore
Postato alle 0:38
Martedė, 16/12/2008
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:
Codice sorgente - presumibilmente C++

  1. char *substr(const char *string, char delim1, char delim2){
  2.  
  3.    char *substr = NULL;
  4.  
  5.    if((substr = malloc(strlen(string) * sizeof(char))) == NULL){
  6.  
  7.       puts("Errore di memoria");
  8.       exit(1);
  9.  
  10.    }
  11.  
  12.    while(*string){
  13.  
  14.       if(*string == delim1){
  15.  
  16.          while(*string != delim2 && *string != '\0')
  17.             *substr++ = *string++;
  18.  
  19.          return substr;
  20.  
  21.       }
  22.  
  23.       string++;
  24.  
  25.    }
  26.  
  27.    return substr;
  28.  
  29. }



Poi usi la seguende funzione per estarre le sottostringhe in ogni linea:
Codice sorgente - presumibilmente C++

  1. char linea1[50] = /*blablabla*/;
  2. char linea2[50] = /*blablabla*/;
  3.  
  4. char *substr1 = substr(linea1, '(', ')');
  5. char *substr2 = substr(linea2, '(', ')');
  6.  
  7. /*Confronti Vari ed eventuali*/


Ultima modifica effettuata da mc il 16/12/2008 alle 0:43
PM Quote
Avatar
mc (Normal User)
Rookie


Messaggi: 52
Iscritto: 04/12/2008

Segnala al moderatore
Postato alle 0:38
Martedė, 16/12/2008
DOPPIO

Ultima modifica effettuata da mc il 16/12/2008 alle 0:42
PM Quote
Avatar
feddur (Normal User)
Pro


Messaggi: 200
Iscritto: 06/03/2008

Segnala al moderatore
Postato alle 19:55
Mercoledė, 17/12/2008
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:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>     
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string.h>
  5. #include <stdio.h>
  6.  
  7. void memorizza(int j, char string[300]);
  8.  
  9. int main(void)         
  10. {      
  11.     int i = 0;
  12.     char stringa[300];
  13.     FILE *leggoinput;
  14.  
  15.  
  16.        if ((leggoinput = fopen("file.txt", "r")) != NULL)                
  17.        {                              
  18.          while(!feof(leggoinput))
  19.          {
  20.              fgets(stringa, 300, leggoinput);
  21.              //printf("==>%s", stringa);
  22.              memorizza(i, stringa);
  23.              i++;
  24.          }
  25.        }
  26.  
  27.     printf("\n ***Terminato***\n");
  28.     system("PAUSE");
  29.     return(0); 
  30. }
  31.  
  32. void memorizza(int j, char string[300])
  33. {
  34. char dialog[j][300];
  35. dialog[j][string];
  36. }



come faccio a inserire string[300]?

PM Quote
Avatar
mc (Normal User)
Rookie


Messaggi: 52
Iscritto: 04/12/2008

Segnala al moderatore
Postato alle 20:11
Mercoledė, 17/12/2008
Semmai il ciclo di lettura lo metti nella funzione memorizza ...
Una cosa cosė:
Codice sorgente - presumibilmente C#

  1. int memorizza(char *where[], int numero_byte_riga, int numero_linee);
  2.  
  3. int main(void){
  4.  
  5.    FILE *fp = NULL
  6.    char *lines[50];
  7.    const int numero_byte_per_riga = 300;
  8.    int numero_righe_lette = 0;
  9.  
  10.    /*... Apri file ...*/
  11.  
  12.    numero_righe_lette = memorizza(fp, lines, numero_byte_per_riga, 50);
  13.  
  14.    /*... Elaborazione ...*/
  15.  
  16.    return 0;
  17.  
  18. }
  19.  
  20. /*Legge numero_linee da file fp*/
  21. int memorizza(FILE *fp, char *where[], int numero_byte_riga, int numero_linee){
  22.  
  23.    int i;
  24.  
  25.    for(i = 0; i < numero_linee && !feof(fp); i++){
  26.  
  27.       where[i] = malloc(numero_byte_riga * sizeof(char));
  28.       assert(where[i] != NULL);
  29.  
  30.       fgets(where[i], numero_byte_riga - 1, fp);
  31.  
  32.    }
  33.  
  34.    return i;
  35.  
  36. }



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.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo