joaomb Posted May 11, 2013 at 09:21 PM Report #506940 Posted May 11, 2013 at 09:21 PM oi pessoal, tenho um programa para o qual já desenvolvi algumas funções mas ficaram 2 para fazer, a primeira e ordenar por ordem alfabética a segunda e inserir um elemento numa linha, e se numa posterior estiver algo, esse algo deve avançar, alguma ideia de como fazer? e que não estou a ver muito bem;
pmg Posted May 11, 2013 at 10:22 PM Report #506943 Posted May 11, 2013 at 10:22 PM Duas maneiras básicas de fazer o que pretendes são: 1) lês o ficheiro completo para memória, alteras a memória, escreves o ficheiro completo 2) abres dois ficheiros: o original para leitura e outro temporário para escrita. À medida que vais lendo dum, alteras e escreves no outro. Quando terminar o processamento apagas o original e mudas o nome ao temporário. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
joaomb Posted May 12, 2013 at 09:01 AM Author Report #506955 Posted May 12, 2013 at 09:01 AM (edited) entao podias dizerme como ler um ficheiro todo seguido para a memoria? eu estava para ir por essa maneira , mas como nao sabia fiz assim(tem um erro, duplica uma palavra, mormalmente a segunda ordenada) ordena(FILE *fp,int conta,int tamanho)/*conta e o numero de palavras e tamanho o tamanho da maior*/ { int i,j,k; char entra[conta][tamanho];/** N palavras com M letras no maximo */ char aux[tamanho]; rewind(fp); i=0; while(i<conta){ fgets(entra[i],MAX,fp); i++; } for(i=1;i<conta;i++) { for(j=1;j<conta;j++) { if(strcmp(entra[j-1],entra[j])>0) { strcpy(aux,entra[j-1]); strcpy(entra[j-1],entra[j]); strcpy(entra[j],aux); } } } rewind(fp); printf("\nPalavras por ordem:\n"); for(k=0;k<conta;k++) { fprintf(fp,"%s",entra[k]); printf("%s\n",entra[k]); } } Edited May 12, 2013 at 09:12 AM by joaomb
pmg Posted May 12, 2013 at 09:19 AM Report #506957 Posted May 12, 2013 at 09:19 AM (edited) Digamos que o teu ficheiro de texto tem no máximo 100000 linhas em que cada uma tem, no máximo, 500 caracteres. #include <stdio.h> int main(void) { FILE *handle; handle = fopen("whatever", "r"); if (!handle) { /* erro */ } else { size_t nlines = 0; char texto[100000][500]; while (fgets(texto[nlines], 500, handle)) { /* aqui podes validar se a linha cabe nos 500 caracteres */ /* aqui podes apagar o '\n' no final de cada linha */ nlines += 1; } fclose(handle); /* o ficheiro completo está agora no array `texto` */ /* podes ordenar ou fazer o que quiseres */ /* e depois escrever tudo em disco */ } return 0; } Obviamente, o uso de alocação dinâmica de memória (em vez do array `texto`) torna o programa mais adaptável no que respeita a tamanhos de ficheiros e comprimentos de linhas. Edited May 12, 2013 at 09:21 AM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
joaomb Posted May 12, 2013 at 09:34 AM Author Report #506959 Posted May 12, 2013 at 09:34 AM obrigado, ja agora, o que significa o size_t?
pmg Posted May 12, 2013 at 09:48 AM Report #506961 Posted May 12, 2013 at 09:48 AM O size_t é um tipo de dados (como unsigned long int) que serve para conter tamanhos de objectos, indices de arrays, etc. É um typedef para um tipo unsigned e, portanto, não pode ter valores negativos. Eu uso-o sempre para indexação de arrays. Podes usar int em vez dele, mas o size_t é mais apropriado. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now