Cod sursa(job #1865091)

Utilizator AlexandruGHGhiurutan Alexandru AlexandruGH Data 1 februarie 2017 13:20:07
Problema Text Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 2.19 kb
#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;
}