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

3.28 Usuwanie spacji

Ostatnio zmodyfikowano 2019-01-01 23:00
Autor Wiadomość
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 N2 kroków.
P-173246
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?
C/C++
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 );
   
}
P-173267
pekfos
» 2018-12-16 18:29:51
Warunki są błędne. Używaj std::string::npos.
P-173268
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?

C/C++
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 );
       
    }
P-173369
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.
P-173371
rottingham
Temat założony przez niniejszego użytkownika
» 2019-01-01 20:08:22
Rozumiem. Czy teraz użyłem poprawnie obu funkcji?

C/C++
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?

C/C++
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 );
}
P-173386
pekfos
» 2019-01-01 20:18:36
Wygląda dobrze.
P-173387
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! :)
P-173390
1 2 3 « 4 »
Poprzednia strona Strona 4 z 4