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

Wyrazy jednolite/(palindromy?)

Ostatnio zmodyfikowano 2017-05-25 09:04
Autor Wiadomość
latajacaryba
» 2017-05-25 00:10:09
Ale... jak wygodniej? Przecież to prawie żadna różnica, powiem więcej, w przypadku osobnych zmiennych nie martwisz się o indeksy, rozmiar czy wyjście poza tablicę.


@Michal11
Skąd pomysł na taki algorytm, zamiast pętli która sprawdza, czy wyraz1 == wyraz2 oraz pierwsza litera wyrazu == każda inna litera wyrazu? Kwestie wydajnościowe, czy to ja coś źle zrobiłem? :D
P-161552
ArgonZapan
» 2017-05-25 02:07:46
C/C++
#include <fstream>
#include <iostream>
#include <string>


int main() {
    std::ifstream file;
    std::string string[ 2 ];
    size_t result = 0;
    file.open( "file.txt" );
    if( file.good() ) {
        std::cout << "Plik wczytano" << std::endl;
        while( !file.eof() ) {
            file >> string[ 0 ] >> string[ 1 ];
            if( string[ 0 ] == string[ 1 ] ) { //Sprawdzamy czy oba wyrazy są identyczne.
                for( size_t i = string[ 0 ].size() - 1; i > 0; i-- ) {
                    if( string[ 0 ].at( 0 ) == string[ 0 ].at( i ) ) { //Sprawdzamy jeden z nich, czy ma takie same litery, w całym ciągu.
                        if( i == 1 ) result++;
                       
                    }
                    else break;
                   
                }
            }
        }
    }
    else { std::cout << "plik nie został wczytany" << std::endl; }
    std::cout << "Wynik: " << result << std::endl;
    getchar();
    return 0;
}
P-161554
michal11
» 2017-05-25 08:36:43
@Avaris

Moim zdaniem jest napisana poprawnie, jedynie ostatni of jest niepotrzebny i trochę źle napisany, ale najszybciej to sprawdzisz poprawiając otwieranie i testując.
Btw.
C/C++
int k = 0;
for( int i = 0; i < 2000; i++ )
{
    fin >> anagramy[ k ];
    k++;
}

nigdzie nie korzystasz ze zmiennej k, w tej pętli nie korzystasz ze zmiennej i, czy zawsze w pliku jest 2000 wyrazów? Jeżeli tak to k jest niepotrzebne, jeżeli nie to powinieneś sprawdzać ile wczytano i później korzystać z tej wiedzy.

@latajacaryba

Moim zdaniem twój kod jest przekombinowany i nieczytelny (
if( wiersz1[ wiersz1.size() - 1 ][ 0 ] != wiersz1[ wiersz.size() - 1 ][ i ] )
 musiałem się chwilę zastanowić żeby to zrozumieć i zorientować się, że jednak nie porównujesz zawsze tylko ostatniej pary). Poza tym porównywanie dwóch stringów ma złożoność liniową, robisz to jako pierwszą instrukcję i to w ife, ja to maksymalnie opóźniam.

P-161556
Avaris
Temat założony przez niniejszego użytkownika
» 2017-05-25 09:04:19
Wszystko już poprawiłem i działa jak należy. Dziękuję bardzo za pomoc. Pozdrawiam!
P-161557
1 « 2 »
Poprzednia strona Strona 2 z 2