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

7 Responses to “Converter Texto de Um Ficheiro Para Maiúsculas e Minúsculas em C”

  1. Paulo A. Silva Says:

    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?

  2. 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?

  3. Paulo A. Silva Says:

    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 ‘Ç’ ?

  4. Pois, não tinha pensado nessa questão! Confesso que verifiquei apenas a possibilidade dos caracteres normais, sem essas excepções!

  5. Paulo A. Silva Says:

    Pronto, acho que já tens um desafio 😀

    Em caso de dúvida podes sempre ver a implementação do toupper() e tolower() 😉

  6. Sim, agora fiquei curioso em saber como funcionam essas funções, vou pesquisar um pouco e tentar implementar uma solução!

    Cumps

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

Leave a Reply