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

[C++] Przepisywanie słów będących palindromami z jednego pliku do drugiego.

Ostatnio zmodyfikowano 2014-10-25 14:22
Autor Wiadomość
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).

C/C++
string palindromy() {
    string wiersz, haslo, palindromy;
    int size;
    fstream plik( "hasla.txt" );
    do {
        getline( plik, wiersz );
        stringstream ss2( wiersz );
        ss2 >> haslo;
        // size_t size = wiersz.size();
        size = haslo.length();
        for( size_t i = 1; i < size / 2; ++i ) {
            if( haslo[ size / 2 - i ] == haslo[ size - i - 1 ] ) //palindromy += haslo;
                 cout << haslo << endl;
           
        }
    }
    while( !plik.eof() );
   
    return palindromy;
   
}
P-119338
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
C/C++
while( plik >> slowo )
{
    if( czyPalindrom( slowo ) )
    {
        zapiszDoPliku( slowo );
    }
}

lub jeżeli jest w jednej linii więcej niż 1 słowo
C/C++
while( getline( cin, linia ) ) // nie jestem pewien czy to jest w 100% poprawne
{
    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ć.
P-119339
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
P-119341
michal11
» 2014-10-25 00:21:08
No to wystarczy zastosować pierwszy wariant, niepotrzebny jest ani getline ani stringstream.
P-119342
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.

C/C++
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;
       
    }
P-119345
stryku
» 2014-10-25 01:57:08
to niestety nie jest funkcja sprawdzająca czy string jest palindromem

C/C++
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ć
P-119350
michal11
» 2014-10-25 14:22:22
C/C++
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.
P-119374
« 1 »
  Strona 1 z 1