[C++] Przepisywanie słów będących palindromami z jednego pliku do drugiego.
Ostatnio zmodyfikowano 2014-10-25 14:22
Amakesh Temat założony przez niniejszego użytkownika |
[C++] Przepisywanie słów będących palindromami z jednego pliku do drugiego. » 2014-10-24 23:16:32 Witam! Mam napisać program, który z pliku "hasla.txt" spośród ok 200 zapisze w innym pliku txt tylko te, które są palindromami. Niestety program wyświetla mi głupoty, choć przy użyciu tej samej funkcji do słów podawanych z klawiatury sprawdza bezbłędnie. Dlaczego więc nie działa na słowach zczytywanych z pliku?(na razie jeszcze nie wczytuje do innego, ale wyświetla na ekran). string palindromy() { string wiersz, haslo, palindromy; int size; fstream plik( "hasla.txt" ); do { getline( plik, wiersz ); stringstream ss2( wiersz ); ss2 >> haslo; size = haslo.length(); for( size_t i = 1; i < size / 2; ++i ) { if( haslo[ size / 2 - i ] == haslo[ size - i - 1 ] ) cout << haslo << endl; } } while( !plik.eof() ); return palindromy; }
|
|
michal11 |
» 2014-10-25 00:14:12 Czy znasz strukturę tego pliku ? Moim zdaniem powinieneś sobie przede wszystkim napisać osobną funkcje która tylko sprawdza czy dane słowo jest palindromem np.: bool czyPalindrom( std::string & tekst ); I wtedy w main czy swojej funkcji wystarczy zrobić tak: jeżeli są tam pojedyncze słowa w każdej linijce while( plik >> slowo ) { if( czyPalindrom( slowo ) ) { zapiszDoPliku( slowo ); } }
lub jeżeli jest w jednej linii więcej niż 1 słowo while( getline( cin, linia ) ) { if( czyPalindrom( linia ) ) { zapiszDoPliku( linia ); } }
Funkcję zapiszDoPliku można sobie bez problemu napisać. W takim wypadku, masz dość przejrzysty kod, i wszystko powinno działać. |
|
Amakesh Temat założony przez niniejszego użytkownika |
» 2014-10-25 00:17:02 Ten plik zawiera hasła/słowa po 1 na wiersz i po 3-10 znaków każde np:
adghgd ajakok akokos amkoku amodda aokor aokormn apraw asprz |
|
michal11 |
» 2014-10-25 00:21:08 No to wystarczy zastosować pierwszy wariant, niepotrzebny jest ani getline ani stringstream. |
|
Amakesh Temat założony przez niniejszego użytkownika |
» 2014-10-25 01:10:48 Napisałam funkcję sprawdzającą jednak efekt dalej ten sam. Wyświetla złe słowa. bool palindromy( string & text ) { int size; size = text.length(); for( size_t i = 1; i < size / 2; ++i ) { if( text[ size / 2 - i ] == text[ size - i - 1 ] ) return 1; if( text[ size / 2 - i ] != text[ size - i - 1 ] ) return 0; }
|
|
stryku |
» 2014-10-25 01:57:08 to niestety nie jest funkcja sprawdzająca czy string jest palindromem bool palindromy( string & text ) { int size; size = text.length(); for( size_t i = 1; i < size / 2; ++i ) if( text[ size / 2 - i ] != text[ size - i - 1 ] ) return false; return true; }
to powinna być |
|
michal11 |
» 2014-10-25 14:22:22 Int size = text.length(); for( size_t i = 0; i < size / 2; ++i ) { if( text[ i ] != text[ size - 1 - i ] ) { return false; } } return true;
Chyba prościej sie nie da. |
|
« 1 » |