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-12 08:14:03
Posłuchałem Twojej rady i zrobiłem kod wyszukujący dwie spacje:
Jeśli masz więcej niż jedną pętlę, robisz zadanie źle.
Podstawowe rozwiązanie ma mieć jedną pętlę.
P-173222
rottingham
Temat założony przez niniejszego użytkownika
» 2018-12-12 23:42:23
@jankowalski25 - dzięki za schemat. Zrozumiałem sposób działania, czas to przełożyć na kod.

Mam mały problem. Napisałem sobie taki kod (kod może się wydawać durny, wiem, ale w ten sposób poznaję działanie języka). Nie rozumiem jednak kompletnie danych wyjściowych, czy możecie powiedzieć dlaczego otrzymuję takie dane?
C/C++
void modyfikujemy( string & tekst )
{
    string tablica;
    int i = 0;
    do
    {
       
        tablica[ i ] = tekst[ i ];
        i++;
        cout << i << endl;
    } while( i < 21 );
   
    for( int i = 0; i < 21; i++ )
         cout << tablica[ i ];
   
}

int main()
{
    string tekst = "To jest przykladowy tekst.";
    cout << tekst << endl;
    modyfikujemy( tekst );
    return 0;
}

Dane jakie otrzymuję:

To jest przykladowy tekst.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
117
To jest przyklad   u
P-173230
pekfos
» 2018-12-13 00:02:57
tablica ma zerową długość. Używaj push_back().
P-173231
rottingham
Temat założony przez niniejszego użytkownika
» 2018-12-13 18:02:06
Jeżeli chodzi o ten sposób bez użycia metody erase.

Czy o to chodziło?

C/C++
{
   
    string szukanyZnak = " ";
    int i = 0;
    int ileZnakow = tekst.size();
    string tablica[ ileZnakow ];
    do
    {
        if(( tekst[ i + 1 ] != szukanyZnak[ 0 ] ) ||( tekst[ i ] != szukanyZnak[ 0 ] ) )
             tablica[ i ] = tekst[ i ];
       
        i++;
    } while( i < ileZnakow );
   
    for( int i = 0; i < ileZnakow; i++ )
         cout << tablica[ i ];
   
}
P-173232
pekfos
» 2018-12-13 19:15:42
Poczytaj, co to jest std::string, bo używasz go na najbardziej bezsensowne sposoby jakie można tu wcisnąć.
C/C++
string szukanyZnak = " ";
string tablica[ ileZnakow ];
Bzdury. Masz dane wejściowe w argumencie tekst i tam masz zapisać tekst po przetworzeniu. Jeśli będzie ci łatwiej, możesz sobie utworzyć dodatkowy napis wynik. I tyle. Ani jednego stringa więcej.
P-173233
rottingham
Temat założony przez niniejszego użytkownika
» 2018-12-13 21:00:52
O ile dobrze zrozumiałem Twoje uwagi... To chyba popełniłem dobry kod...

Czy to rozwiązanie jest dobre? I czy to jest najbardziej efektywna metoda usuwania podwójnych spacji, o której wspominałeś?

C/C++
void modyfikujemy( string & tekst )
{
    char szukanyZnak = ' ';
    int ileZnakow = tekst.size();
    int i = 0;
    int j = 0;
    do
    {
        if(( tekst[ i ] != szukanyZnak ) ||( tekst[ i + 1 ] != szukanyZnak ) )
        {
            tekst[ j ] = tekst[ i ];
            j++;
        }
        i++;
    } while( i < ileZnakow );
   
}
P-173234
pekfos
» 2018-12-13 21:07:58
Pierwsze pytanie zawsze brzmi: czy kod działa poprawnie. W obecnej formie - nie. Ale nie jesteś daleko.
P-173235
rottingham
Temat założony przez niniejszego użytkownika
» 2018-12-14 18:27:19
W ogniu niekończących się prób udało mi się stworzyć poniższy kod. Kod działa. Czy poprawnie wykonałem ten kod? :D
I czy to jest ten najefektywniejszy sposób, o którym wspominałeś?

C/C++
void konwertuj( string & sTekst )
{
    int ileZnakow = sTekst.size();
   
    int i = 0;
    int j = 0;
   
    char szukanyZnak = ' ';
   
    do
    {
        if(( sTekst[ i ] != szukanyZnak ) ||( sTekst[ i + 1 ] != szukanyZnak ) )
        {
            sTekst[ j ] = sTekst[ i ];
            j++;
        }
        i++;
    } while( i < ileZnakow );
   
    sTekst.assign( sTekst, 0, j );
}
P-173238
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona