źle wyszukuje fragmentu wyrazu
Ostatnio zmodyfikowano 2012-04-08 10:02
CTRL85 Temat założony przez niniejszego użytkownika |
źle wyszukuje fragmentu wyrazu » 2012-04-06 14:20:01 Fragment kodu: for( int i = 0; i < licz; i++ ) { for( int g = 0; g < tab2[ i ] + 1; g++ ) { if( dane.pisanie.find( dane.pytanie[ i ][ g ] ) != string::npos ) { licz4 = tab2[ i ] + 1; cout << "Nie jestem pewien, czy znam odpowiedz - " << dane.odpowiedz[ i ][ rand() % licz4 ] << "\n"; znalezione = true; break; } } if( znalezione == true ) break; }
W czym problem? Chyba w tej linii: if( dane.pisanie.find( dane.pytanie[ i ][ g ] ) != string::npos ) Nie wiem czemu cokolwiek wpisze (nawet losowe znaki) zawsze znajdzie i przerwie pętle... EDIT: Takie coś: if( dane.pytanie[ i ][ g ].find( dane.pisanie ) != string::npos ) Działa świetnie, więc dlaczego zamienienie powoduje błędne działanie? x.x |
|
DejaVu |
» 2012-04-06 23:16:07 Bo to nie to samo. Przykład:
|
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2012-04-07 09:21:08 Wiem że to nie to samo, i zależy mi żeby było tak: if( dane.pisanie.find( dane.pytanie[ i ][ g ] ) != string::npos ) Podałem, że na odwrót działa, bo tak zauważyłem, więc zmienne są dobrze przypisane, i raczej porównanie jest skopane... W tym przyapdku nawet jak wpisze znaki których na 10000% tam nie ma to i tak znajduje... |
|
DejaVu |
» 2012-04-07 14:56:10 Algorytmy w standardowych bibliotekach są poprawne. My nie mamy danych na których pracuje Twój program i nie wiemy co w jakiej zmiennej jest przechowywane w Twoim programie. Pewnym jest, że błąd leży po stronie Twojego algorytmu, a nie po stronie biblioteki. /edit: Diagnoza problemu jest natomiast prosta do postawienia - wystarczy napisać jedną linijkę przed if-em: printf( "in \"%s\" find \"%s\"\n", dane.pisanie.c_str(), dane.pytanie[ i ][ g ].c_str() );
|
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2012-04-07 18:42:42 http://iv.pl/images/94501833178113678528.png
Wywala to za każdym razem - cokolwiek bym nie wpisał.
Przy zamianie miejscami (czyli na odwrót jak powinno być) wszystko działa cacy - zatrzymuje dopiero wtedy, gdy znajdzie fragment w wyrazie... |
|
ison |
» 2012-04-07 20:10:43 bo w ostatnim findzie szukasz ciągu pustego, który zawsze jest w dowolnym stringu |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2012-04-07 20:24:00 if( dane.pisanie.find( dane.pytanie[ i ][ g ] ) != string::npos && dane.pytanie[ i ][ g ][ 0 ] != NULL ) Takie coś rozwiązuje problem. Wielkie dzięki za pomoc, bez was nigdy bym tego nie zrobił. :) |
|
jankowalski25 |
» 2012-04-08 10:02:41 Jeśli problem rozwiązany, to zamknij temat. |
|
« 1 » |