cyklopek11 |
» 2012-07-22 20:04:08 matka5432 a zaglądałeś do komentarzy na stronie do której podałeś link? Jest tam namiar na słownik zawierający 3 878 982 słów polskich z odmianą, skróty oraz wyrażenia z obcych języków które się przyjęły w polskim języku. Ja kiedyś też poszukiwałem jakiegoś słownika więc dzięki za linka. A tak swoją drogą właśnie przerabiałem sobie ten słownik bo odmiany są wymieniane po przecinku a ja wolę po każdym wyrazie mieć '\r', '\n' i muszę powiedzieć, że przy takim słowniku bez programowania (wstawek) w asemblerze się nie ucieknie ... |
|
matka5432 Temat założony przez niniejszego użytkownika |
» 2012-07-22 21:38:37 Tak, patrzylem na komentarze. Nie ma za co ;) a co do odmian, narazie jestem poczatkujacy, ledwo znam podstawy c++ i nie chce mi sie w to bawic. Po za tym musze troche praktyki nabarc. I jeszcze tak przy okazji, nie moge do cholery przekazac informacji przez referencje w moim kodzie. Mam funkcje bool i int main(). Jesli do fukcji wpisze komende "return std::cin.good();" lub jej nie wpisze, nie ma to najmniejszego wplywu na zmienna bool w int main() funkcja bool: bool funkcja( std::string & napis, std::string & szukanafraza ) { size_t znalezionaPozycja = napis.find( szukanafraza ); znalezionaPozycja++; if( znalezionaPozycja == std::string::npos ) { } else if( !( znalezionaPozycja == 0 ) ) { std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl; ----------->>>>>> W tym miejscu wpisuje komende "return std::cin.good();" lub nie, tak jak wspomnialem nie ma to najmniejszego wplywu na zmienna bool( w tym przypadku "f" ).Zmiennna "f" zawsze ma wartosc 1 <<<<<<----------- } else { return NULL; } } ---------------------- i odlamek int main() ---------------------- string f = "0"; ... <<<<------tutaj jest caly kod ... if( funkcja( f, f ) == true ) { cout << "dobrze" << endl; f = "1"; }
else { cout << "zle" << endl; f = "0"; } z gory dzieki, nie mam juz do tego nerwow... grrr |
|
Drraven |
» 2012-07-22 21:59:06 |
|
cyklopek11 |
» 2012-07-22 22:16:41 Jak porównujesz zmienną z nią samą to zawsze ci wyjdzie prawda: if( funkcja( f, f ) == true ) { cout << "dobrze" << endl; f = "1"; }
poza tym: - po co w funkcji: funkcja zwracasz return std::cin.good() (stan błędu strumienia wejściowego) zamiast normalne true??? - jak nie modyfikujesz referencji to definiuj funkcje ze stałymi referencjami bo z tak pisanym przez ciebie kodem pogubisz się co się gdzie dzieje bool funkcja( const std::string & napis, const std::string & szukanafraza ) - no i po co inkrementujesz znalezionaPozycja ?? |
|
matka5432 Temat założony przez niniejszego użytkownika |
» 2012-07-22 22:39:24 Jesli poruwnuje zmienna z inna zmienna, to zawsze mam false. Dzisiaj w sumie proboje to na rozne sposoby rozwiazac okolo kilku godzin.. 5? Ani raz sie nie udalo. zawsze true, lub false.
Inkrementuje po to, aby nie bylo pozycji zerowej. Nie wiem dlaczego, ale przeszkadza mi takie cos |
|
cyklopek11 |
» 2012-07-22 22:43:36 Dobra wstaw tutaj cały kod , podaj dane wejściowe które chcesz sprawdzić i wynik jaki oczekujesz. |
|
matka5432 Temat założony przez niniejszego użytkownika |
» 2012-07-22 23:09:54 Wiec chodzi o to, aby program mi napisal w konsoli "znaleziono/nie znaleziono" gdy wpisze jakies slowo, by program go wyszukal. Jak narazie efekt wyglada tak, ze za kazdym razem porgram "mowi" mi, ze znalazl slowo, nawet jesli wpisze dowolny ciag cyferek Az sie boje go tu wstawiac... tylko sie nie wystraszcie ;p tutaj mam funkcje i kawalek int main(); :) #include <string> #include <iostream> #include <conio.h> #include <fstream>
bool funkcja( const std::string & napis, const std::string & szukanafraza ) { size_t znalezionaPozycja = napis.find( szukanafraza ); znalezionaPozycja++; if( znalezionaPozycja == std::string::npos ) { } else if( !( znalezionaPozycja == 0 ) ) { std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl; return true; } else { return NULL; } }
using namespace std; int main() { string f; f = "0"; cout << "f to: " << f << endl; cout << "jaka chcesz wyszukac fraze?" << endl; string szukanafraza; getline( cin, szukanafraza ); string n; int a; n.insert( 0, szukanafraza, 0, 1 ); string napis; to co widzicie pod spodem od warunku if do komentarza z errorem to kawalek kodu ktory powtarza sie 21 razy, roznica w kazdym z nich jest tylko taka, ze literki (w tym przypadku "W") sie zmieniaja. Chcialem w to miejsce wstawic zmienna, ale kompilator widzial tam blad. Chwilke sie z tym pobawilem, ale bez skutkow. if( n == "W" ) { fstream plik; plik.open( "w.txt", ios::in | ios::out ); if( plik.good() ) { while( !plik.eof() ) { getline( plik, napis ); funkcja( napis, szukanafraza ); } plik.close(); } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl; }
...............<<<<----tutaj jest reszta 19 kodow
if( n == "M" ) { string napis; fstream plik; plik.open( "m.txt", ios::in | ios::out ); if( plik.good() ) { while( !plik.eof() ) { getline( plik, napis ); funkcja( napis, szukanafraza ); } plik.close(); } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl; } Ponizsza linijka to wlasnie moje zmartwienie.. nie wiem co wpisac w warunek if, aby true/false byla zmienna i dzialala tak jak opisalem u gory ;/ if( funkcja( napis, szukanafraza ) == true ) { cout << "nie znaleziono" << endl; f = "1"; }
else { cout << "znaleziono" << endl; f = "0"; }
getch(); return 0; } |
|
cyklopek11 |
» 2012-07-22 23:56:59 Namieszałeś nieźle oto działający kod (trzeba go jeszcze doprowadzić do ładu): #include <string> #include <iostream> #include <conio.h> #include <fstream>
using namespace std;
bool funkcja( const string & napis, const string & szukanafraza ) { size_t znalezionaPozycja = napis.find( szukanafraza ); if( znalezionaPozycja == string::npos ) { return false; } else { cout << "Ciag znakow zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl; return true; } }
int main() { bool czyZnalezionoCos = false; string f; f = "0"; cout << "f to: " << f << endl; cout << "jaka chcesz wyszukac fraze?" << endl; string szukanafraza; getline( cin, szukanafraza ); string n; int a; n.insert( 0, szukanafraza, 0, 1 ); string napis; if( n == "W" ) { fstream plik; plik.open( "w.txt", ios::in | ios::out ); if( plik.good() ) { while( !plik.eof() ) { getline( plik, napis ); czyZnalezionoCos = funkcja( napis, szukanafraza ); if( czyZnalezionoCos == true ) break; } if( plik.eof() ) plik.clear(); plik.close(); } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl; } if( czyZnalezionoCos == false ) { cout << "nie znaleziono" << endl; f = "1"; } else { cout << "znaleziono" << endl; f = "0"; } getch(); return 0; }
W katalogu z exekiem stworzyłem plik w.txt o treści: Waldek Weronika Witek Wojtek Wszystko gra ale na przyszłość: - czyść flagi błędów strumienia - zapisuj wynik bool do zmiennej tymczasowej i porównuj a nie porównuj tego co zwraca funkcja po tym jak wykonała już całą robotę (tam tkwił błąd) |
|
1 2 3 4 « 5 » 6 |