Indice del forum
 FAQ   Cerca   Lista utenti   Gruppi   Registrati   Profilo   Messaggi privati   Log in 
AIUTO! Array multidimensionale per lettura di stringhe

 
Nuovo argomento   Rispondi    Indice del forum -> Programmazione: c#, c++, Java, HTML, PHP, Javascript...
Precedente :: Successivo  

Autore

Messaggio

World_emp
Novizio


Registrato: 28/08/09 23:45
Messaggi: 1

MessaggioInviato: Ven Ago 28, 2009 11:46 pm    Oggetto: AIUTO! Array multidimensionale per lettura di stringhe

Rispondi citando


Salve a tutti, sono nuovo da queste parti. Devo creare un programma per un lavoro di concordanza su un testo. Per la distinzione delle parole ho scelto di registrarle "carattere per carattere" in un array bidimensionale, dato che le funzioni che leggono automaticamente le stringhe si basano sugli spazi e i return per definire l'inizio e la fine di una parola, e per il mio lavoro è un procedimento troppo primitivo. Ho cominciato a fare un programma, ma riesco solo a registrare la PRIMA parola di un testo nell'array, in poche parole non sono riuscito a creare un ciclo che prosegue il lavoro per tutte le parole. Se poteste dirmi dove sbaglio mi fareste un grande favore. Grazie.

Codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>         /*ispunct()*/ 

main()
{     
FILE *fp;     
char ch, parole[1000][20]; /*parole[i][j]*/     
int i, j;     
fp=fopen("1","r");     
ch = fgetc(fp);     

  if(fp==NULL)
  {     
   printf("Non rieso ad aprire il file\n");     
   exit(1);
  } 

for(i=0; (i < 10) && (feof(fp) == 0); i++)      /* Il seguente passaggio identifica una parola all'interno del testo                                                     ** passando carattere per carattere e la aggiunge ad un elemento dell'array */   

for(j=0; (j < 20) && (feof(fp) == 0); j++)    /*Leggere carattere per carattere*/   
  {       
   if(ispunct(ch) || isspace(ch))                /*Ferma il ciclo se il carattere è uno spazio o un punto*/    
     break;       
   parole[i][j] = ch;
   ch = fgetc(fp);   
}
   
parole[i][j] = '\0';               /*Terminatore della parola, senza fa casini (riserva sempre spazio fino al 20)*/ 
}

Top

Profilo Invia messaggio privato

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 836

MessaggioInviato: Dom Ago 30, 2009 5:08 pm    Oggetto:

Rispondi citando


A parte che credo che dia problemi, in particolare se hai una aprola di 20 caratteri, alla fine hai j = 20, e l'istruzione parole[i][j] = '\0'; va in eccezione (se l'array è di 20 l'indice può andare da 0 a 19, 20 da eccezione). Non ho provato a eseguire il codice, ma mi sembra grossomodo corretto, provato a faare prinatere che so i valori di i o ogni parola trovata?
_________________
Visita anche il sito Agriturismo Umbria per maggiori informazioni sull'Umbria!

Realizzazione siti web e applicazioni ASp.NEt, C/C++, C#

Top

Profilo Invia messaggio privato Invia e-mail

ixamit
Novizio


Registrato: 27/09/09 11:23
Messaggi: 4

MessaggioInviato: Mar Ott 13, 2009 11:55 am    Oggetto:

Rispondi citando


Codice:

#include <stdio.h>

#define NOT_ALLOWED " .\n"

int is_allowed (int ch)
{
   //
   // check 4 not_allowed chars
   //
   int x,y;

   for (y=0;y<sizeof(NOT_ALLOWED);y++)
      if (ch==NOT_ALLOWED[y])
         return 0;

   return 1;
}

int main ()
{
   char parole[1000][20];

   FILE *fp;
   int ch;
   int flag;
   int i,j;
   if ((fp=fopen("1","r"))==NULL)
   {
         printf("Non rieso ad aprire il file\n");
         return 1;
   }

   i=j=0;
   flag=1;
   do
   {
      if ((ch=fgetc (fp))!=-1)
      {
         if (!is_allowed (ch))
         {
            if (!flag++)
            {
               parole[i++][j]='\0';
               j=0;
            }
         }
         else
         {
            flag=0;
            parole[i][j++]=ch;
         }
      }

   }while (!feof(fp));

   fclose (fp);

   // just debuging...
   for (ch=0;ch<i;ch++)
      printf ("%d\t%s\n",ch,parole[ch]);


   return 0;
      
}

Top

Profilo Invia messaggio privato HomePage

Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione: c#, c++, Java, HTML, PHP, Javascript... Tutti i fusi orari sono GMT
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi
Forum del sito TuttoMontefalco.it - Umbria - Italy topic RSS feed 


Torna al sito TuttoMontefalco.it


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it

SoftGreen 1.1 phpBB theme by DaTutorials.com
Copyright © DaTutorials 2005