pekfos |
» 2018-12-14 22:43:07 Powinieneś użyć resize(), a nie assign(). Poza tym, kod wygląda dobrze. I czy to jest ten najefektywniejszy sposób, o którym wspominałeś? |
To jest ten sposób. Dla napisu długości N, składającego się z samych spacji, ilość kroków jest proporcjonalna do N. Usuwanie po jednym znaku z użyciem erase() ma N 2 kroków. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2018-12-16 18:26:51 Chciałbym jeszcze poprawnie napisać ten program z użyciem dwóch metod: erase oraz find. Czy to jest poprawnie napisane? void modyfikujemy( string & tekst ) { char szukanyZnak = ' '; size_t czySpacja = tekst.find( szukanyZnak ); do { if(( tekst[ czySpacja + 1 ] == szukanyZnak ) ) tekst.erase( czySpacja, 1 ); if(( tekst[ czySpacja + 1 ] != szukanyZnak ) ) czySpacja = tekst.find( szukanyZnak, czySpacja + 1 ); } while( tekst[ czySpacja + 1 ] == szukanyZnak ); }
|
|
pekfos |
» 2018-12-16 18:29:51 Warunki są błędne. Używaj std::string::npos. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2018-12-30 17:14:39 Czasem trzeba odejść od tematu, żeby nabrać dystansu. Chyba napisałem poprawne rozwiązanie korzystające z metody size oraz find. Czy to jest dobrze zrobiony kod? void modyfikujemy( string & tekst ) { size_t czySpacja = tekst.find( ' ' ); while( czySpacja != string::npos ) { if(( tekst[ czySpacja ] == ' ' ) &&( tekst[ czySpacja + 1 ] == ' ' ) ) tekst.erase( czySpacja, 1 ); else czySpacja = tekst.find( ' ', czySpacja + 1 ); }
|
|
pekfos |
» 2018-12-30 17:52:40 Wygląda poprawnie, ale nie dobrze. Ten if jest tam potrzebny wyłącznie dlatego, że nie przemyślałeś użycia find(). Albo użyj find() z sensem, albo całkiem go wywal. Obie wersje będą krótsze od tego co masz teraz. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-01-01 20:08:22 Rozumiem. Czy teraz użyłem poprawnie obu funkcji? void modyfikujemy( string & tekst ) { string spacja = " "; size_t czySpacja = tekst.find( spacja ); while( czySpacja != string::npos ) { tekst.erase( czySpacja + 1, 1 ); czySpacja = tekst.find( spacja, czySpacja ); } }
Jeszcze udało mi się skrócić metodę bez użycia wspomnianych funkcji. Czy to jest napisane poprawnie i dobrze? void modyfikujemy( string & tekst ) { int j = 0; int ileZnakow = tekst.size(); for( int i = 0; i < ileZnakow; i++ ) { if(( tekst[ i ] != ' ' ) ||( tekst[ i + 1 ] != ' ' ) ) { tekst[ j ] = tekst[ i ]; j++; } } tekst.resize( j ); }
|
|
pekfos |
» 2019-01-01 20:18:36 Wygląda dobrze. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-01-01 23:00:40 Super, wielkie dzięki za udzieloną pomoc! Myślę, że udało mi się dość dobrze zrozumieć samo narzędzie, zatem zamykam temat.
Pozdrawiam i korzystając z okazji życzę Wam aby nowy 2019 rok był udany i lepszy od poprzedniego! :) |
|
1 2 3 « 4 » |