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

Rozdział 28 - stosowanie metod .find i .replace - czy moja nauka idzie w dobrym kierunku?

Ostatnio zmodyfikowano 2019-04-26 21:49
Autor Wiadomość
tadzik1977
Temat założony przez niniejszego użytkownika
Rozdział 28 - stosowanie metod .find i .replace - czy moja nauka idzie w dobrym kierunku?
» 2019-04-25 22:26:48
Witam.
Wiem,każda lekcja ma średnio 12 tematów na forum :D
Dlatego z góry przepraszam za zakładanie nowego.
Mam jednak pewne wątpliwości.
Spójrzcie na moje zadanie domowe i napiszcie czy przedstawione rozwiązanie nie jest nazbyt "drogą na skróty"?

C/C++
#include <iostream>
#include <string>

std::string zamien( std::string & sTekst, std::string szuk_, std::string wstaw_ )
{
    if( sTekst.find( szuk_ ) != std::string::npos )
    do
    {
        sTekst.replace( sTekst.find( szuk_ ), wstaw_.size(), wstaw_ );
    } while( sTekst.find( szuk_ ) != std::string::npos );
   
    return sTekst;
}

std::string kasuj_spacje( std::string & sTekst )
{
    if( sTekst.find( "  " ) != std::string::npos )
    do
    {
        sTekst.erase( sTekst.find( "  " ), 1 );
    } while( sTekst.find( "  " ) != std::string::npos );
   
    return sTekst;
}

std::string konwertuj( std::string sTekst )
{
    std::string sWynik;
    sWynik = zamien( sTekst, "<b>", "[b]" );
    sWynik = zamien( sTekst, "</b>", "[/b]" );
    sWynik = kasuj_spacje( sTekst );
    return sWynik;
}
int main()
{
    std::cout << konwertuj( "<b>to jest </b> testowy       napis     <b>:)" ) << std::endl;
    std::cout << konwertuj( "  s       a         m      e         sp    a   c j    e" ) << std::endl;
    std::cout << konwertuj( "<<B><//b><i></i>" ) << std::endl;
    std::cout << konwertuj( "                 i         " ) << std::endl;
    return 0;
}
P-174521
pekfos
» 2019-04-26 00:34:32
Masz na myśli te funkcje pomocnicze? Bardzo dobrze, że są.
P-174522
tadzik1977
Temat założony przez niniejszego użytkownika
» 2019-04-26 07:59:55
Nie, funkcje pomocnicze to już wiem że są dobrą praktyką bo czytam kurs uważnie :D
Przeglądając posty na forum dot r. 28, zauważyłem, że rozwiązania są bardziej skomplikowane a ludzie sugerują, żeby używać metody .insert i obiektu pomocniczego string.
Dlatego nie wiem, czy takie uproszczenie zadania jakiego dokonałem jest dobre pod kątem dalszej nauki.

Funkcja pomocnicza "zamień", sprawdza się tylko w przypadku gdy fraza szukana i zamieniana mają taką sama ilość znaków.
Do wykonania zadania domowego to wystarczy ale czy nie powinienem pomyśleć o takim zbudowaniu funkcji aby radziła sobie z frazami o różnym rozmiarze?

Poza tym jak się z tematem "przespałem" to zauważyłem, że w moim programie "brakarz czyta cały czas tą książkę od nowa" ;)
W pętli do ... while metoda .find cały czas sprawdza tekst od początku, więc powinienem dodać zmienną, która będzie przesuwać znak od którego szukana fraza jest szukana.
P-174523
pekfos
» 2019-04-26 14:41:55
To jest mniej więcej oczekiwane rozwiązanie. Lekcja omawia te operacje, a wydajność nie jest czynnikiem poprawności wykonania zadania. W tematach, które znalazłeś padało pytanie, czy można wykonać zadanie wydajniej, a to prowadzi do bardziej skomplikowanego kodu i raczej bez użycia operacji z lekcji. Najlepiej przeczytaj któryś z tych tematów od początku, by mieć właściwy kontekst.
P-174532
tadzik1977
Temat założony przez niniejszego użytkownika
» 2019-04-26 21:49:53
Rozumiem, mam nie wychodzić przed orkiestrę i skoncentrować się na kolejnych etapach nauki.
Dzięki za pomoc, temat zamykam, i zabieram się za dalszą naukę :D
P-174534
« 1 »
  Strona 1 z 1