Lekcja 28
Ostatnio zmodyfikowano 2015-12-12 20:37
Krway Temat założony przez niniejszego użytkownika |
Lekcja 28 » 2015-12-09 08:46:59 Witam. Napisałem kod który ma dziwny błąd i nie po skompilowaniu przestaje działać a sam program nie wypisuje mi tekstu poza pętlą. Na dodatek kompilator nie wskazuje błędu #include <iostream> #include <string> using namespace std; string konwertuj( string & sTekst ) { int p1[ 111 ], p2[ 101 ], p3[ 110 ]; int i1, i2, i3; int d1, d2, d3; int i = 0; i1 = 0; i2 = 0; i3 = 0; string szu1 = "<b>"; string szu2 = "</b>"; string szu3 = " "; string zm1 = "[b]"; string zm2 = "[/b]"; d1 = szu1.size(); d2 = szu2.size(); d3 = szu3.size(); size_t zp1 = sTekst.find( szu1 ); size_t zp2 = sTekst.find( szu2 ); size_t zp3 = sTekst.find( szu3 ); do { p1[ i1 ] = zp1; sTekst.erase( p1[ i1 ], d1 ); sTekst.insert( p1[ i1 ], zm1 ); zp1 = sTekst.find( szu1, zp1 + szu1.size() ); i1++; } while( zp1 != string::npos ); do { p2[ i2 ] = zp2; sTekst.erase( p2[ i2 ], d2 ); sTekst.insert( p2[ i2 ], zm2 ); zp2 = sTekst.find( szu2, zp2 + szu2.size() ); i2++; } while( zp2 != string::npos ); while( i < 5 ) { do { p3[ i3 ] = zp3; if( p3[ i3 ] == 0 && i3 != 0 ) { zp3 = sTekst.find( szu3, zp3 + szu3.size() ); p3[ i3 ] = zp3; } sTekst.erase( p3[ i3 ], d3 ); zp3 = sTekst.find( szu3, zp3 + szu3.size() ); i3++; } while( zp3 != string::npos ); i++; zp3 = 0; cout << sTekst << endl; } cout << sTekst; } int main() { string tekst = "<b>to jest </b> testowy napis <b>:)"; cout << konwertuj( tekst ) << endl; return 0; } Po skompilowaniu jak wcześniej pisałem program się crashuje i wypisuje mi: terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::erase This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. Process returned 255 (0xFF) execution time : 17.609 s |
|
carlosmay |
» 2015-12-09 09:33:21 Program pada bo wychodzisz poza zakres string 'a. |
|
Krway Temat założony przez niniejszego użytkownika |
» 2015-12-10 13:51:03 Czyli? string ma określoną długość działania? Nie rozumiem i czy jest na to jakiś sposób? |
|
carlosmay |
» 2015-12-10 14:08:04 string str = "Janek"; Taki wyraz ma długość 5 znaków ( pozycje od 0 do 4). Przypisując teraz do zmiennej 'str' inny wyraz to odpowiedni konstruktor klasy 'string' przydzieli odpowiednią ilość pamięci na ten wyraz, ale po przydzieleniu pracując na tej zmiennej musisz trzymać się określonego rozmiaru. Zmienna string to tablica 'char', wiec operacje iteracyjne są takie same jak w każdej innej tablicy. |
|
carlosmay |
» 2015-12-10 14:48:19 Szukanie pozycji realizuj na bieżąco (nie na poczatku dla wszystkich fraz).
Mocno przekombinowany kod. Krok 1: usuń nadmiarowe spacje. Krok 2: podmień znaki '<' na '[' oraz '>' na ']' (iterowanie po tablicy). |
|
Krway Temat założony przez niniejszego użytkownika |
» 2015-12-12 20:37:51 Dzięki! ;) Twoja rada zmusiła mnie do naprawdę głębokiego przeanalizowania kodu i faktycznie wpisałem dużo niepotrzebnych rzeczy które wydawały mi się logiczne podczas tworzenia kodu. |
|
« 1 » |