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()?