Cześć wszystkim,
Jestem kompletnie początkującym jeśli chodzi o C++, dlatego pytanie może być głupie i oczywiste, jednak nie znalazłem na nie odpowiedzi.
Mianowicie, mam za zadanie w przykładowym programie stworzyć funkcję, która posortuje mi stringi z innego pliku, względem ich długości, jednak zabronione jest używanie tablic, jak i używanie dodatkowych bibliotek. I właśnie z tym wiąże się problem, dalsza część zadania jest stosunkowo prosta, jednak nie mam pomysłu jak poruszać się po stringach bez tablic.
Z góry dziękuję za wszystkie rady.
Użyj std::vector. Chyba że chodzi o działanie na pliku bez angażowania pamięci podręcznej w ogóle, wtedy dochodzi zabawa z mmap, ale jeśli jesteś początkujący to raczej nie o to chodzi
kq napisał(a):
Użyj std::vector. Chyba że chodzi o działanie na pliku bez angażowania pamięci podręcznej w ogóle, wtedy dochodzi zabawa z mmap, ale jeśli jesteś początkujący to raczej nie o to chodzi
Nie mogę użyć std::vector, ponieważ wymaga to użycia dodatkowej biblioteki. Myślałem już o tym, no ale właśnie takie są ograniczenia.
Falqon napisał(a):
kq napisał(a):
Użyj std::vector. Chyba że chodzi o działanie na pliku bez angażowania pamięci podręcznej w ogóle, wtedy dochodzi zabawa z mmap, ale jeśli jesteś początkujący to raczej nie o to chodzi
Nie mogę użyć std::vector, ponieważ wymaga to użycia dodatkowej biblioteki. Myślałem już o tym, no ale właśnie takie są ograniczenia.
jest to bliotekla STANDARDOWA
Tak std::cin
- tego też nie wolno ?
Właściwie nie da się napisać użytecznego komunikującego się z otoczeniem programu, zupełnie bez.
Olej tablice, używaj plików , rób ich duże ilości i w nich przechowuj dane. To nie tablice tylko strumienie he he he I potem odczytywanie rozmiarów plików i sortowanie bąbelkowe he he he A struktury dozwolone czy ma byc primitve level max? Bo możesz potworzyć struktury w nich wskaźniki do plików i ich rozmiar he he he Ale to dawno nie robiłem, tylko się domyślam, ale ja bym tak kombinował. ALBO chodzi o sortowanie wraz z regularnym zapisem plików na zmianę z wstawkami aktualnego stringu w miejsce docelowe w nowym pliku. Robisz pętle z sortowaniem i szukasz w które miejsce wpisać string. I tak generujesz na zmiane dwa pliki zamiennie.
Polecenie:
Zadaniem jest zaimplementować poniższe procedury o podanych nazwach i określonych typach argumentów.
- void SortCount (string, string, string)
Podprogram odczytuje dane o podanej strukturze z pliku o nazwie przekazanej pierwszym argumentem, zaś efektem działania będą odczytane dane zapisane w pliku o nazwie przekazanej pierwszym argumentem zgodnie z relacją:- Dane ze składową typu int o większej liczności są umieszczone przed danymi o mniejszej liczności wystąpień składowej typu int.
- [...]
W rozwiązaniu nie wolno używać znaków kwadatowych nawiasów lub ich zastępników, oznaczając zakaz używania tablic.
Zabronione jest używanie typów wskaźnikowych i referencyjnych oraz dynamicznego przydziału pamięci.
Zabronione jest używanie słowa class
Zabronione jest własne włączanie plików nagłówkowych, ale można założyć dostępność plików fstream, iostream oraz string
W sumie rozumiem cel tego ćwiczenie, chyba ktoś planuje zrobienie spisu nazwisk wszystkich obywateli świata. Wtedy to by miało sens. W pamięci by nie było jednocześnie wielu danych, nic co mogłoby wzbudzić niepokój operatorów. Falqon - uczysz się u jakiegoś profesorka co ma zapędy dyktatorskie?
infinityhost napisał(a):
W sumie rozumiem cel tego ćwiczenie, chyba ktoś planuje zrobienie spisu nazwisk wszystkich obywateli świata. Wtedy to by miało sens. W pamięci by nie było jednocześnie wielu danych, nic co mogłoby wzbudzić niepokój operatorów. Falqon - uczysz się u jakiegoś profesorka co ma zapędy dyktatorskie?
Zdecydowanie tak bym to określił, jak i zapędy psychopatyczne.
Zawsze możesz użyć merge sort
i sortować używając dwóch ifstream
do odczytu oraz jednego ofstream
do zapisu.
_13th_Dragon napisał(a):
Zawsze możesz użyć
merge sort
i sortować używając dwóchifstream
do odczytu oraz jednegoofstream
do zapisu.
Merge sort nie będzie wymagać użycia nawiasu kwadratowego?
Falqon napisał(a):
Merge sort nie będzie wymagać użycia nawiasu kwadratowego?
Jak masz jedynie problem z użyciem nawiasów kwadratowych to spokojnie jedziesz bąbelkowym, używając:
type *tb=(type *)malloc(N*sizeof(type)); // pamięć
*(tb+i)=value; //indeksacja
Nie ma nawiasów klamrowych, ale tablica jest.
lub:
vector<type> tb(N); // pamięć
tb.at(i)=value; // indeksacja
Nie ma nawiasów klamrowych, ale tablica jest.
Natomiast jak nie może być tablic to znaczy że tylko i wyłącznie merge sort
.
Dzięki wszystkim za pomoc, postaram się coś z tego zrobić
Pomysł durny (tak jak i zadanie), ale w zasadzie możesz to zrobic przez bubble sort - wykorzystując to, że zamieniane są tam tylko elementy leżące koło siebie (zatem w pliku otwartym w trybie RW jeśli uznasz że musisz zamienić miejscami dwa wiersze - wystarczy seek i zapisanie ich w odwrotnej kolejności - liczba bajtów się zgadza więc nie ma potrzeby modyfikowania reszty zawartości).
Coś w tym stylu
1. Policz wszystkie wiersze w pliku --> nlines
2. Wykonaj nlines razy:
1. seek na poczatek
2. ustaw pos1 na zero
3. wczytaj str1
4 Wykonaj nlines-1 razy:
1. zapamietaj aktualną pozycję jako pos2 i wczytaj str2
2. jeśli trzeba zamienić str1 i str2, to
1. seek na pos1
2. piszesz str2
3. zapamiętujesz aktualną pozycję jako pos1
4. piszesz str1
3. jeśli nie trzeba było zamieniać - ustaw pos1 na pos2
4. ustaw str1 na str2