Rozdział 28, błąd po uruchomieniu programu
Ostatnio zmodyfikowano 2017-09-16 15:00
Hubert999aa Temat założony przez niniejszego użytkownika |
Rozdział 28, błąd po uruchomieniu programu » 2017-09-16 13:35:01 Witam, mam problem z zadaniem domowym z rozdziału 28. Po wstępnej kompilacji i próbie uruchomienia części programu wyskakuje mi taki tekst: Znak zostal odnaleziony na pozycji 0 Znak zostal odnaleziony na pozycji 11 Znak zostal odnaleziony na pozycji 40 Nie znaleziono znaku w tekscie terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::erase: __pos (which is 4294967295) > this->size() (which is 45) This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. Następnie pojawia się że program przestał działać. Mój kod źródłowy: #include <iostream> #include <string>
std::string konwertuj( std::string & sTekst ) { std::string sWynik; int i = 0; do { size_t znalezionaPozycja = sTekst.find( '<' ); if( znalezionaPozycja == std::string::npos ) std::cout << "Nie znaleziono znaku w tekscie" << std::endl; else std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl; i++; sTekst.erase( znalezionaPozycja, 1 ); sTekst.insert( znalezionaPozycja, "[" ); } while( i < 6 ); return sWynik; } int main() { std::string tekst = "<b>to jest </b> testowy napis <b>:)"; std::cout << konwertuj( tekst ) << std::endl; return 0; }
No i głównie moje pytanie to o co chodzi, czemu wyrzuca mi taki błąd ? |
|
Luq |
» 2017-09-16 15:00:01 Co z tego, że wypisujesz komunikat, że nie znaleziono znaku w tekście gdy znalezionaPozycja == std::string::npos , skoro i tak później przekazujesz tę wartość do std::string::erase . |
|
« 1 » |