Converter Texto de Um Ficheiro Para Maiúsculas e Minúsculas em C
Posted by admin on 13 de Maio de 2012 | Filed under Exercícios, Línguagens de Programação, Programação
Este exercício foi proposto numas das aulas práticas de Metodologias de Programação I e agrega a manipulação de ficheiros e strings. O exercício é relativamente fácil, pois em C já existem pequenas funções que nos facilitam o trabalho, e são elas o toupper, tolower.
O exercício é o seguinte:
Ler o conteúdo de um ficheiro txt, converte-lo para maiúsculas e minúsculas separadamente e guardar o resultado num outro ficheiro txt.
Aqui fica o código que criei para resolver o exercício:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 500
main()
{
FILE *entrada, *saida;
entrada = fopen("entrada.txt","r");
char string[MAX];
int i = 0;
if(entrada==NULL)
{
printf("erro na abertura do ficheiro de entrada\n");
system("pause");
}
saida = fopen("saida.txt","w");
if(saida==NULL)
{
printf("erro na abertura do ficheiro de saida\n");
system("pause");
}
while(!feof(entrada))
{
fgets(string, MAX, entrada);
printf(" %s", string);
}
printf("\n\n\n");
for( i = 0; string[i]; i++)
{
string[i] = toupper(string[i] );
}
printf(" %s", string);
fprintf(saida,"%s",string);
fprintf(saida,"\n\n\n",string);
printf("\n\n\n");
for( i = 0; string[i]; i++)
{
string[i] = tolower(string[i]);
}
printf(" %s", string);
fprintf(saida,"%s",string);
fclose(entrada);
fclose(saida);
}
Se tiverem algum reparo a fazer ou dica de como melhorar o código estou disponível para as ler, aceitar e implementar.
Share



Maio 13th, 2012 at 11:15 am
Podem fazer-se alguns reparos ao código que apresentas como por exemplo ao nível de performance: percorres três vezes a mesma lista/string: para ler do ficheiro para a memória, para converter para maiúscula e depois para converter para minúscula.
Mesmo que estejas apenas a praticar a leitura e escrita de ficheiros, para que estes exercícios ofereçam algum sumo na tua formação enquanto programador é preciso voltar às origens. Imagina que as funções toupper() e tolower() não existiam, como farias?
Maio 13th, 2012 at 11:59 am
Caso as funções toupper() e tolower() não existissem teria de usar a soma e subtracção da numeração do código ASCI, por exemplo de “a” para “A” teria de fazer 97 que é a posição do “a” – 36 , pois a posição do “A” é 65, isto usando o sistema decimal…
Além desta forma ainda haveria alguma outra forma de resolver o problema?
Maio 13th, 2012 at 1:00 pm
Essa (brincar o código ASCII dos caracteres) é uma possibilidade, mas não a dês por “simples”.
Como resolverias a questão, por exemplo, do ‘Ç’ ?
Maio 13th, 2012 at 1:11 pm
Pois, não tinha pensado nessa questão! Confesso que verifiquei apenas a possibilidade dos caracteres normais, sem essas excepções!
Maio 13th, 2012 at 1:20 pm
Pronto, acho que já tens um desafio 😀
Em caso de dúvida podes sempre ver a implementação do toupper() e tolower() 😉
Maio 13th, 2012 at 1:22 pm
Sim, agora fiquei curioso em saber como funcionam essas funções, vou pesquisar um pouco e tentar implementar uma solução!
Cumps
Maio 13th, 2012 at 9:40 pm
Olá!
Confesso que andei a procura de como funcionam as funções toupper() e tolower() e não encontrei nada que me explique o seu funcionamento.
No entanto estive a analisar os códigos ASCII e um caso de resolver a excepção dos caracteres especiais como o “Ç” é usar um operador condicional para cada um desses casos, como por exemplo:
if (string[i] == ‘ç’)
{
string[i] = string[i] – 7;
}
Onde o ‘Ç’ = 128 e o ‘ç’ = 135…
Será esta a forma como funciona o toupper()?