Salve a tutti. Ho un problema con questo programma. Praticamente carico in memoria delle stringhe da un file con la funzione fgets() e normalizzo stringa per stringa, cioè elimino spazi in testa ed in coda(trim), spazi doppi, segni di punteggiatura e se il carattere è minuscolo lo trasformo in maiuscolo. Il mio problema sta nel fatto che se leggo una stringa di spazi bianche, quando faccio il trim dovrebbe diventare vuota, cioe con s[0]='\0', però quando scrivo su file mi riscrive la stringa bianca che non voglio, perchè? non dovrebbe scrivere nulla?
Ecco il codice:
codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define dmax 100 typedef char stringa[dmax+1]; void trim(char *string); void normalizza(char *s); int main() { stringa EL[dmax]; int i=0; int dim=0; char nomefile[30]; FILE *fp; printf("Inserisci il nome del file che intendi normalizzare: "); gets(nomefile); fp=fopen(nomefile,"r"); if(fp==NULL) printf("ERRORE\a\a\a"); else { while((fgets(EL[i++],dmax,fp))!=NULL); dim=i; for(i=0;i<dim;i++) { normalizza(EL[i]); } fp=fopen(nomefile,"w"); for(i=0;i<dim;i++) { if(strlen(EL[i])!=0) fputs(EL[i],fp); } } system("pause>nul"); fclose(fp); return 0; } void trim(char *string) { char s2[dmax]; int i,j,dim; for(i=0;string[i]==' ';i++); dim=strlen(string); while(isblank(string[dim-1])) dim--; for(j=0;i<dim;j++,i++) s2[j]=string[i]; s2[j]='\0'; strcpy(string,s2); } void normalizza(char *s) { int i,j=0; char s2[dmax+1]; for(i=0;i<strlen(s);i++) { if(!(ispunct(s[i])) && !(s[i]==s[i+1] && s[i]==' ')) { if(s[i]>='a' && s[i]<='z') s[i]=s[i]-'a'+'A'; s2[j++]=s[i]; } } s2[j]='\0'; for(i=0;i<strlen(s2);){ if(s2[i]==s2[i+1] && s2[i]==' ') for(j=i;j<strlen(s2);j++) s2[j]=s2[j+1]; else i++;} if(strlen(s2)!=0) trim(s2); strcpy(s,s2); }

Rispondi quotando