sortowanie ,język C
Ostatnio zmodyfikowano 2017-11-28 11:26
Usurper Temat założony przez niniejszego użytkownika |
sortowanie ,język C » 2017-11-28 10:27:35 Witam,mam problem z zadaniem
Dany jest plik wejściowy tekstowy o nazwie przechowywanej w zmiennej nazwa1. Każda linijka pliku zawiera jeden napis (jeden wyraz). Utworzyć plik tekstowy o nazwie pobranej ze zmiennej nazwa2. Plik ten powinien zawierać napisy z pliku wejściowego w kolejności od najkrótszych do najdłuższych (każdy napis w osobnej linii pliku wyjściowego). Napisy o jednakowej długości nie muszą być posortowane alfabetycznie. Długość każdej linii pliku nie przekracza MAX_L znaków. Zakładamy, że w pliku jest maksymalnie W napisów.
otóż nie wiem w jaki sposób te napisy uporządkować żeby były od najkrótszych do najdłuższych kod: #include <stdio.h> #include <stdlib.h>
#define W 20 #define MAX_L 200
int main() { char wyraz[W][MAX_L];
int i; char nazwa1[200]; printf("Podaj nazwe pliku do otwarcia:"); scanf("%s",nazwa1);
FILE * plik=fopen(nazwa1,"r");
char nazwa2[200]; printf("Podaj nazwe nowego pliku do utworzenia :"); scanf("%s",nazwa2); FILE * plik1=fopen(nazwa2,"w");
for(i=0;fscanf(plik,"%s",wyraz)==1;i++);
int zmienna;
do { zmienna=0; for(i=0;i<W;i++) if(strlen(wyraz)>strlen(wyraz[i+1])) { zmienna++; char *x=wyraz; wyraz=wyraz[i+1]; wyraz[i+1]=&x; } }while(zmienna!=0); for(i=0;i<W;i++) { fprintf(plik1,"%s\n",wyraz); }
fclose(plik); fclose(plik1);
return 0; }
|
|
Anim |
» 2017-11-28 11:26:57 Pierwsze pytanie, to czy parametry nazwa1, nazwa2 mają być pobierane z klawiatury? Dla plików to trochę głupie rozwiązanie. Zapewne chodzi o skorzystanie z argumentów przekazanych do funkcji main, czyli argc, argv[] <- to pierwsza sugestia :)
Druga jest taka - odczytuj dane z pierwszego pliku wierszami i zapisuj je do bufora (tablicy) - jeśli znasz od razu parametr W, to ustaw go na sztywno, jak nie, to powinieneś skorzystać z przydziału dynamicznego pamięci. Następnie, po skopiowaniu całego pliku do tablicy zaczyna się sortowanie. Tutaj masz duży wybór, bo metod sortowania jest od groma. Jednak skoro masz około 20-30 linijek w pliku to spokojnie możesz skorzystać z najprostszego sortowania bąbelkowego (proste dwie pętle for). Skoro masz sortować po długości to kryterium porównawcze uzyskasz tak jak robisz, czyli wykorzystując funkcję strlen() :) I następnie, po posortowaniu zapisujesz po kolei dane do nowego pliku. |
|
« 1 » |