Rozdział 28 - stosowanie metod .find i .replace - czy moja nauka idzie w dobrym kierunku?
Ostatnio zmodyfikowano 2019-04-26 21:49
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"? #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; }
|
|
pekfos |
» 2019-04-26 00:34:32 Masz na myśli te funkcje pomocnicze? Bardzo dobrze, że są. |
|
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.
|
|
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. |
|
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 |
|
« 1 » |