Cześć.
Jestem amatorem co do C++ ale chętnie się uczę. Ostatnio wpadł mi do głowy pomysł żeby napisać swojego rodzaju "robota". Chodzi tu o to, aby zadawać mu pytania które będzie miał zapisywane w innym pliku wraz z odpowiedziami które wyświetli. Jeśli nie będzie miał któregoś pytania zapisanego - poprosi o odpowiedź i sam dopisze to do swojego pliku. W ten sposób po jakimś czasie takiej "samoedukacji" będzie miał jakiś zakres "wiedzy". No i tutaj pojawia się pytanie. W jaki sposób się do tego zabrać? Macie jakieś przykłady? Wskazówki? Nie szukam jelenia, sam chcę to zrobić żeby się nauczyć ale chętnie się czymś pokieruje.
Pozdrawiam
Jeśli interesuję cię rozwiązanie po najniższej linii oporu(jednemu ciągowi znaków odpowiada drugi), to wystarczy zapoznanie się z biblioteką <fstream>. W innym przypadku założenia są mało precyzyjne.
Na początek zapisz to do pamięci, uporządkuj. Jak masz to w pamięci łatwo zapiszesz do pliku, wskazano już <fstream>
jako podstawowe rozwiązanie, choć jeśli uczysz się C++, to celowalbym w wysokopoziomowe rozwiązanie - ODB, czyli rozwiązanie automatycznie zapisujące obiekty w pliku. Dużo ci nie opowiem, bo jestem typem niskopoziomowca. W C
, najniżejpoziomowo rozwiąznie jest takie:
struct Information {
char question[100];
char answer[100];
};
int main() {
struct Information i = {
question = "Ilu sąsiadów ma Polska?",
.answer = "7"
};
FILE *output = fopen("x.dat", "w");
fwrite(&i, sizeof(Information), 1, output);
close(output);
}
Innymi słowy po prostu kopiuję kawalki pamięci do pliku w określonym porządku. Ten kawałek kodu jest wysoce niewydajny, ale na dobry początek i najprościej ilustruje problem na najniższym poziomie (w ODB i tym podobnych masz wylane - po to są języki wysokiego poziomu). Jeśli skorzystać z API systemowego jest nawet możliwy zapis do pliku poprzez zapis do pamięci (polecenie nmap()
w POSIX). Jak lubisz rozumieć rzeczy, polecam od tego zacząć, jest to pewnie mało poręczne, z drugiej strony to dobra lekcja programowania. Nie jest to jednak sposób właściwy dla C++ tylko dla C.
Nie jestem pewny czy C++ jest dobrym językiem jeśli takie najbardziej podstawowe rzeczy cię nie interesują. Są języki z lepszą abstrakcją, pozwalające pisać mniej kodu, C++ robi się co raz bardziej niszowe. W skrajnym przypadku polecałbym po prostu od razu uderzyć w stronę machine learning, żeby zrobić to naprawdę kozacko.
Zainteresuj się kontenerem std::map oraz std::unordered_map, a także typem std::string. Zapis wykonasz do pliku z użyciem std::fstream (wersje std::ifstream, std::ofstream). Jeśli danych będzie niewiele (orientacyjnie ~ 1000 wpisów), wystarczy wersja z odczytaniem przy starcie par zapytanie i odpowiedź gdzie zapytanie będzie kluczem w mapie, oraz zapisanie wszystkich przy zakończeniu programu.