 |
|
 |
| Precedente :: Successivo |
Autore |
Messaggio |
|
|
World_emp Novizio
Registrato: 28/08/09 23:45 Messaggi: 1
|
Inviato: Ven Ago 28, 2009 11:46 pm Oggetto: AIUTO! Array multidimensionale per lettura di stringhe |
|
|
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 |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
Inviato: Dom Ago 30, 2009 5:08 pm Oggetto: |
|
|
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 |
|
 |
ixamit Novizio
Registrato: 27/09/09 11:23 Messaggi: 4
|
Inviato: Mar Ott 13, 2009 11:55 am Oggetto: |
|
|
| 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 |
|
 |
|
|
|
|
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
|
|