[Rozdział 28] Zadanie domowe
Ostatnio zmodyfikowano 2022-02-11 12:50
Venithas Temat założony przez niniejszego użytkownika |
[Rozdział 28] Zadanie domowe » 2022-02-11 04:29:59 Cześć, stwierdziłem że nic już więcej chyba nie wymyślę więc przychodzę do was z prośbą o pomoc. Wiem że tematy tego typu już są, ale niestety zauważyłem że treść zadania się zmieniła na przestrzeni lat i według mnie jest teraz bardziej wymagające. Moje sposoby zazwyczaj działały do momentu gdy program chciał kompilować ostatnie zdanie zadania: "std::cout << konwertuj( " << B > < W momencie gdy miałem tą linię objętą komentarzem to wszystko było ok, ale w momencie odkomentowania program wykrzaczał, po wielu godzinach kombinowania na wszelakie sposoby skończyłem z czymś co działa, lecz mam wątpliwości co do jednej rzeczy. #include <iostream> #include <string>
std::string konwertuj( std::string sTekst ) { std::string sWynik; size_t znajdz3 = sTekst.find( " " ); size_t znajdz2 = sTekst.find( "</b>" ); size_t znajdz = sTekst.find( "<b>" ); if( znajdz != std::string::npos ) { for( size_t i = 0; i < 2; i++ ) { znajdz = sTekst.find( "<b>" ); sTekst.erase( znajdz, 3 ); sTekst.insert( znajdz, "[b]" ); } znajdz2 = sTekst.find( "</b>" ); sTekst.erase( znajdz2, 4 ); sTekst.insert( znajdz2, "[/b]" ); } do { znajdz3 = sTekst.find( " " ); if( znajdz3 < 1000 ) { sTekst.erase( znajdz3, 1 ); } } while( znajdz3 != std::string::npos ); sWynik = 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; return 0; }
Często gdy mam błąd to wywołuje obiekty by zobaczyć ich wartość, i doszedłem do wniosku że przy usuwaniu zbędnych odstępów wstawię funkcje "if", ponieważ bez tej funkcji w pewnym momencie osiąga kosmiczne wartości i powoduję błąd, jest ktoś w stanie wytłumaczyć mi dlaczego tak się dzieję lub wytknąć mi błąd który zrobiłem i go nie widzę. |
|
nanoant20 |
» 2022-02-11 10:59:18 przekombinowane a to if( znajdz3 < 1000 ) to jest w ogóle niezrozumiałe #include <iostream> #include <cstring>
using namespace std;
std::string konwertuj( std::string sTekst ) { std::string sWynik; string str1 = "<b>"; string str2 = "</b>"; for( unsigned i = 0; i < sTekst.length(); ++i ) { size_t found1 = sTekst.find( str1 ); if( found1 != string::npos ) { sTekst.erase( found1, str1.size() ); sTekst.insert( found1, "[b]" ); } size_t found2 = sTekst.find( str2 ); if( found2 != string::npos ) { sTekst.erase( found2, str2.size() ); sTekst.insert( found2, "[/b]" ); } if( !( sTekst[ i ] == ' ' && sTekst[ i + 1 ] == ' ' ) ) { sWynik += sTekst[ i ]; } } 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; return 0; }
|
|
Venithas Temat założony przez niniejszego użytkownika |
» 2022-02-11 12:50:58 Dzięki wielkie, tak myślałem że przekombinowane, a "if" dałem w tym miejscu tylko dlatego żeby ten program działał bo "znajdz3" osiągał kosmiczne wartości bez tego. Byłem pewien że jest lepszy sposób na napisanie tego programu i nie byłem zadowolony z swojego rozwiązania dlatego też założyłem temat, bo nie potrafię zostawić tak rozdziału. Niewątpliwie jest to rozdział przy którym najwięcej czasu spędziłem i najwięcej wyciągnę, Twoje warunki w "if" przy usuwaniu spacji to piękno w prostocie, jeszcze raz dzięki i zamykam temat. |
|
« 1 » |