[c++] Problemy w napisaniu słownika informatycznego

0

Witam.
Piszę program zaliczeniowy, który jest słownikiem. Po wpisaniu słowa on przeszukuje za nim w slownik.dat <pisanym w="w" notatniku="notatniku"> i zwraca całą linijkę definicji tego słowa.
Mam mniej więcej takie problemy z moim programem:

  • Nie mogę go dobrze zapętlić by po każdym zwróconym słowie <bądź błędzie, że nie ma danego słowa> wrócił do menu gł.
  • Nie wyskakuje komunikat, że nie ma danego słowa w slowniku.dat tylko Od razu wywala mi program.
  • W 2 punkcie nie wiem jak napisać by program, po wciśnięciu '2' otworzył slownik.dat w notatniku w ramach edycji notatnika. Chyba, że łatwiej było by edytować slownik.dat za pomocą programu?
#include <bitset>   
#include <iostream>
#include <fstream> 

using namespace std;

void end (void);   

class Slownik
{     
public:
    string dane, slowo, szukaj;
};

int main(int argc, char *argv[])
{
    Slownik slo;                                                 
    slo.dane = "";
    slo.slowo = "";
    slo.szukaj;
    char wybor, t, odp;
    do
    {
        cout << "  1 - Slownik pojec informatycznych " << endl;
        cout << "  2 - Edytowanie slownika " << endl;
        cout << "  3 - Wyjscie z programu " << endl; cout << "  ";
        cout << ">"; cin >> wybor; cout << endl;
   
        switch(wybor)
        {   case '1':                                     
            {   string linia, dane;                         
                bool c=0;                                       
                ifstream u;                             
                u.open("slownik.dat");               
                if (!u.is_open())
                {   cout << " Error 001: Nie istnieje baza danych z definicjami"; 
                    end();                           
                    exit(EXIT_FAILURE);
                }               
  
                ifstream szukaj("slownik.dat");       
                cout << "  Szukany slowo: ";             
                cin >> slo.szukaj;                   
                while(!szukaj.eof())                     
                {                                   
                    szukaj >> slo.dane;         
                    if(c==0)                             
                        if(slo.szukaj==slo.dane) 
                        {                                     
                            getline(szukaj,linia);               
                            dane+=linia;                   
                            cout << "  " << slo.szukaj << " - " << linia << endl;
                            if(linia==".")
                            {   ;
                            }   
                            end();                                                   
                            c=1;                                 
                            u.close();
                            return 1;                             
                        }         
                        else
                            c=0;                                     
                }                                             
                if(c==0)
                    cout << "Error 002. brak danych w slowniku";
  
                cout << " Czy chcesz powrocic do menu?? t/n?  " << endl;
            }
        }
    }while (odp=='t');         
}

void end(void)
{
    char c;
    cin >> c;
}

q: najpierw sie naucz formatowac kod..

0

Jaki jest sens tworzyć klasę, która posiada właściwości tylko w public i nie posiada żadnych metod? Może lepiej użyć struktury?

A odpowiadając na Twoje pytanie...dodaj sobie taką metodę do klasy i wykorzystaj:

//zwraca true jesli znaleziono slowo oraz je wyswietla
//zwraca false jesli nie znaleziono slowa
bool FindWord(string Word, char* FileName)
{
	ifstream   DictFile;
	string       FileLine;

		DictFile.open(FileName);
		while( !DictFile.eof() )
		{
			getline(DictFile, FileLine);
			{
				if( FileLine.find(Word) )
				{
					cout << FileLine << endl;
					DictFile.close();
					return true;
				}
			}
		}

	DictFile.close();
	return false;
}

//nie sprecyzowałeś jaka jest struktura słownika, więc nawet jeśli ta funkcja będzie Ci w jakimś stopniu odpowiadała musisz ją przerobić przy samym porównywaniu do słowa, np. tak, żeby porównywała tylko n liter z lewej strony linijki..etc.
//sorry, ale nie chciało mi się nawet kompilować.

pzdr.

0
ktos_tam__ napisał(a)

Jaki jest sens tworzyć klasę, która posiada właściwości tylko w public i nie posiada żadnych metod? Może lepiej użyć struktury?

na jedno wychodzi. w C++ class i struct to to samo, tylko domyslny dostep jest rozny

1 użytkowników online, w tym zalogowanych: 0, gości: 1