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);
}