Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

źle wyszukuje fragmentu wyrazu

Ostatnio zmodyfikowano 2012-04-08 10:02
Autor Wiadomość
CTRL85
Temat założony przez niniejszego użytkownika
źle wyszukuje fragmentu wyrazu
» 2012-04-06 14:20:01
Fragment kodu:

C/C++
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
P-53959
DejaVu
» 2012-04-06 23:16:07
Bo to nie to samo. Przykład:
  • in "AB" find "B" => true
  • in "B" find "AB" => false
P-53993
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...
P-54005
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:
C/C++
printf( "in \"%s\" find \"%s\"\n", dane.pisanie.c_str(), dane.pytanie[ i ][ g ].c_str() );
P-54030
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...
P-54068
ison
» 2012-04-07 20:10:43
bo w ostatnim findzie szukasz ciągu pustego, który zawsze jest w dowolnym stringu
P-54080
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ł. :)
P-54081
jankowalski25
» 2012-04-08 10:02:41
Jeśli problem rozwiązany, to zamknij temat.
P-54102
« 1 »
  Strona 1 z 1