Pagini recente » Rating lungu alexandru (alexandruLA) | Istoria paginii utilizator/6qqqqqq | Profil tubba10852 | Istoria paginii runda/cerculdeinfo-lectia18-grafuri2/clasament | Cod sursa (job #1865091)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * read_line()
{
FILE *fIn;
char *line;
fIn=fopen("text.in","r");
if(fIn==NULL)
{
perror("Error at reading file.");
exit(1);
}
if((line=(char*)malloc(sizeof(char)*100))==NULL)
{
perror("Errror at allocating memory.");
exit(1);
}
fgets(line,99,fIn);
fclose(fIn);
return line;
}
char * remove_unnecessary_spaces(char*line)
{
int i=0,len,nrSpaces=0,prevSpace=0;
//eliminate starting spaces
while(line[i]==' ')
{
i++;
}
if(i!=0)
{
strcpy(line,line+i);
}
//eliminate the ending spaces
len=strlen(line);
i=len-1;
while(line[i]==' ')
{
i--;
}
if(i!=len-1)
{
line[i+1]='\0';
len=strlen(line);
}
for(i=0; i<len; i++)
{
if(line[i]==' ')
{
if(prevSpace)
{
nrSpaces++;
}
else
{
prevSpace=1;
}
}
else
{
if(prevSpace==1 && nrSpaces>0)
{
strcpy(line+i-nrSpaces,line+i);
len=strlen(line);
nrSpaces=0;
prevSpace=0;
}
else
{
nrSpaces=0;
prevSpace=0;
}
}
}
return line;
}
void compute_average_word_length(char *line)
{
FILE *fOut;
int i,nrLetters=0,nrWords=0,len;
fOut=fopen("text.out","w");
if(fOut==NULL)
{
perror("Error at creating file.");
exit(2);
}
len=strlen(line);
for(i=0;i<len;i++)
{
if(line[i]!=' ')
{
if((line[i]>='a' && line[i]<='z') || (line[i]>='A' && line[i]<='Z'))
{
nrLetters++;
}
}else{
nrWords++;
}
}
nrWords++;
fprintf(fOut,"%d",nrLetters/nrWords);
}
int main()
{
char *line=read_line();
line=remove_unnecessary_spaces(line);
compute_average_word_length(line);
return 0;
}