mateczek |
» 2017-11-22 11:00:35 for( int i = 0, j = 0; j < plikowe.size(); ) |
|
adrian.paz Temat założony przez niniejszego użytkownika |
» 2017-11-22 11:26:32 Boże co mi tu dalej nie działa.. Działa tylko jak mam pomieszane litery tylko jak już jest np literka więcej w wpisanych to już się nie zgadza.. Nie wiem może problem jest gdzieś dalej w programie? #include <iostream> #include <string> #include <fstream> #include <cstdlib> #include <conio.h> #include <algorithm> using namespace std; bool porownanie( string plikowe, string wpisane ) { int licz; sort( plikowe.begin(), plikowe.end() ); sort( wpisane.begin(), wpisane.end() ); for( int i = 0, j = 0; j < plikowe.size(); ) { if( i >= wpisane.size() ) return false; if( wpisane[ i ] > plikowe[ j ] ) i++; if( wpisane[ i ] < plikowe[ j ] ) i++; if( wpisane[ i ] == plikowe[ j ] ) i++; j++; licz++; if( licz == plikowe.size() ) return plikowe == wpisane; } return plikowe == wpisane; } void odczyt() { system( "cls" ); fstream plik; plik.open( "slownik.txt", ios::in ); if( plik.good() == false ) { cout << "Wystapil problem ze znalezieniem/otwarciem pliku 'slownik.txt'!" << endl; exit( 0 ); } string slowo, napis; cout << "Podaj litery ktore masz do dyspozycji: "; cin >> slowo; system( "cls" ); int nr_linii = 1, licznik = 0; while( getline( plik, napis ) ) { if( porownanie( napis, slowo ) ) { cout << napis << endl; licznik = 1; } nr_linii++; } system( "PAUSE" ); if( licznik == 0 ) { cout << "Podane litery nie pasuja do zadnego wyrazu zapisanego w pliku. Wprowadz inne litery" << endl << endl; char wybor; cout << "1. Nowe litery" << endl; wybor = getch(); switch( wybor ) { case '1': odczyt(); break; default: exit( 0 ); break; } } }
void zapis() { system( "cls" ); string slowo; fstream plik; int nr_linii = 1; plik.open( "slownik.txt", ios::out | ios::app ); while( true ) { cout << "Podaj nowe slowo: "; cin >> slowo; plik << slowo << endl; nr_linii++; system( "cls" ); } plik.close(); } int main() { char wybor; cout << "1. Chce dodac do slownika nowe elementy" << endl; cout << "2. Chce przeszukac slownik" << endl; wybor = getch(); switch( wybor ) { case '1': zapis(); break; case '2': odczyt(); break; default: { system( "cls" ); cout << "W takim razie milego dnia :)" << endl << endl; system( "PAUSE" ); } } return 0; } ] |
|
karambaHZP |
» 2017-11-22 11:43:06 Ale wiesz, że w if( wpisane[ i ] == plikowe[ j ] ) i++; j++; licz++; przy spełnionym warunku wykonywana jest postinkrementacja i++; , a pozostałe wykonywane są zawsze? |
|
adrian.paz Temat założony przez niniejszego użytkownika |
» 2017-11-22 12:07:28 No to jak to zrobić? Chodzi mi o to żeby sprawdziło kolejna literkę w jednym i drugim słowie. To licz jest po to żeby mi liczyło dobre literki. Jak słowo plikowe jest np 4 literowe to musza 4 pasować. Jak to zrobić żeby działało? Nie za bardzo wiem co tu jest zle, ci to postimrementacja? |
|
mateczek |
» 2017-11-22 14:50:09 tak na drodze logiki skoro masz tylko return plikowe == wpisane; to myślę, że cała pętla for nie ma znaczenia. i tak funkcja działa w ten sposób bool porownanie( string plikowe, string wpisane ) { int licz; sort( plikowe.begin(), plikowe.end() ); sort( wpisane.begin(), wpisane.end() ); return plikowe == wpisane; }
|
|
pekfos |
» 2017-11-22 14:59:17 Źle zrobiłeś już to, co podałem wcześniej w kodzie. Masz przejść po wszystkich wpisanych literach. Nie wszystkie plikowe muszą być wykorzystane. Dodatek zmiennej licz jest błędny i nie ma tu żadnego sensu. Kod w warunkach też nie ma sensu. Tu nie ma być żadnego porównywania całych napisów! Jedyne co tu możesz dodać tego typu, to sprawdzenie rozmiarów napisów, czy w ogóle starczy liter zanim zaczniesz dokładnie sprawdzać. Jedyne co napisałeś z sensem, to inkrementacja obu liczników, gdy para znaków jest sobie równa, ale nawet tego nie zapisałeś poprawnie. |
|
mateczek |
» 2017-11-22 15:12:50 weź sobie string z literami i kasuj literkę jak znajdziesz #include <iostream> #include <string> using namespace std; bool porownaj( const string & wyraz, string litery ) { for( int i = 0; i < wyraz.size(); i++ ) { bool jest = false; for( int j = 0; j < litery.size(); j++ ) { if( wyraz[ i ] == litery[ j ] ) { jest = true; litery[ j ] = 0; break; } } if( !jest ) return false; } return true; } int main() { string litery = "alamakotaa"; string wyraz1 = "alamakotki"; string wyraz2 = "aalamatoka"; cout << "1 porownanie ok=0 " << porownaj( wyraz1, litery ) << endl; cout << "2 porownanie ok=1 " << porownaj( wyraz2, litery ) << endl; } |
|
YooSy |
» 2017-11-22 23:07:17 bool is_it_possible( std::string random_letters, const std::string & word ) { if( random_letters.size() < word.size() ) { return false; } auto word_it = word.cbegin(); auto rnd_ltr_it = random_letters.begin(); while( word_it != word.cend() ) { auto pos = random_letters.find( * word_it ); if( pos != std::string::npos ) { random_letters.erase( pos, 1 ); ++word_it; } else { return false; } } return true; } |
|
1 2 « 3 » 4 |