1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[AJUDA] ficheiros em c

Discussão em 'Programação' iniciada por Nody, 12 de Março de 2008. (Respostas: 8; Visualizações: 1687)

  1. Nody

    Nody Power Member

    pessoal tenho 1 problema da escola para entregar na sexta muito simples mas não sei por onde lhe ei de pegar. é o seguinte:

    Ler a primeira linha de um ficheiro .txt onde está escrito o nome completo de uma pessoa.
    a)Contar o número de caracteres e o número de palavras.
    b)Ler apena a primeira letra de cada nome e criar uma sigla.

    PS:os espaços não contam.

    Alguem manda umas ideias po ar?

    Cumps
     
  2. Baderous

    Baderous Banido

    fopen para abrir o ficheiro e lês a 1ª linha para uma string com o fgets. A partir daí é trabalhar sobre essa string.
     
  3. Nody

    Nody Power Member

    e em relação às palavras? como conto cada palavra? como excluo os espaços? e se o nome tiver espaços antes? :S o meu problema tá aí...

    Cumps
     
  4. mrjm

    mrjm Power Member

    Olá,

    Primeiro tens de abrir o fixeiro .txt em modo de leitura, já que não o vais editar

    Segundo podes fazer um menu em que a opção 1 será contar o numero de caracteres e para isso tens de criar um ciclo for em que ele apague os espaços, de modo a ficar tudo seguido (i.e JOAO MENDES, ficava JOAOMENDES) e assim fazes a contagem. Depois podes por na segunda opcção do menu "criar sigla" e crias outro ciclo em que ele examina a primeira letra e copia para uma variavel e depois do espaço ve a outra letra e adiciona a outra variavel auxiliar.... depois e so fazeres um printf das variaveis... =) gostas de ideia?
     
  5. Nody

    Nody Power Member

    gosto da ideia, parece-me simples e eficaz, para me elucidar um pouco + poderias-me dar um exemplo em código de como ler apenas a primeira letra de uma palavra? senão for incomodar agradecia :)

    Cumps
     
  6. Baderous

    Baderous Banido

    Começas a analisar a string e, enquanto o 1º caracter for espaço, vais avançando e ignorando.
    Depois, quando já tiveres encontrado o 1º caracter não espaço, para contar as palavras crias um ciclo em que vais percorrendo a string e sempre que encontrares um espaço, incrementas um contador (pois sempre que há um espaço é uma palavra nova). No fim retornas esse contador incrementado de uma unidade (pois por este método, como a seguir ao último nome não tem espaço mas existe palavra, tens de contar também).
     
  7. Nody

    Nody Power Member

    Podias trocar isso um pouco + por míudos?

    Abraço.
     
  8. Baderous

    Baderous Banido

    Código:
    #include <stdio.h>
    #include <ctype.h> [COLOR=Red]//necessária para a função isalpha[/COLOR]
    
    int main() {
        int c=0,i,j,k;
        char nome[100];
        FILE *fp;
        fp = fopen("file.txt","r");
        while (fgets(nome,sizeof(nome),fp)!= NULL) {
              for (i=0;nome[i]==' ';i++); [COLOR=red]//Ignora qualquer espaço inicial na string, logo não interessa se o nome tem espaços antes da 1ª palava[/COLOR]
              for (j=strlen(nome);!isalpha(nome[j]);j--) 
                  nome[j]='\0'; [COLOR=red]//Elimina os espaços existentes no fim da última palavra do nome[/COLOR]
              for (k=i;nome[k]!='\0';k++)
                  if (nome[k]==' ')
                     c++; [COLOR=red]//Vai contando os espaços que existem entre as palavras do nome[/COLOR]
                  
                     }
        printf("Numero de palavras: %d\n",c+1); [COLOR=red]//+1 para contar com a última palavra[/COLOR]
        fclose(fp);
        return 0;
    }
    Vou deixar aqui um exemplo para perceberes melhor como funciona cada passo:

    Está um bocado à bruta mas é o melhor que se arranja.
     
    Última edição: 14 de Março de 2008
  9. Nody

    Nody Power Member

    mil obrigados :)
     

Partilhar esta Página