[lekcja] Modyfikowanie tekstu i sprawdzanie jego długości-praca domowa
Ostatnio zmodyfikowano 2017-08-13 16:59
TwardyOrzech Temat założony przez niniejszego użytkownika |
[lekcja] Modyfikowanie tekstu i sprawdzanie jego długości-praca domowa » 2017-08-11 21:52:54 #include <iostream> #include <string>
std::string konwertuj( std::string & sTekst ) { size_t poz; std::string sWynik = sTekst; do { size_t poz = sWynik.find( "</b>" ); if( poz != std::string::npos ) { sWynik.erase( poz, 3 ); sWynik.insert( poz, "[/b]" ); } std::cout << poz << ","; } while( poz != std::string::npos ); do { size_t poz = sWynik.find( "<b>" ); if( poz != std::string::npos ) { sWynik.erase( poz, 3 ); sWynik.insert( poz, "[b]" ); } std::cout << poz << ","; } while( poz != std::string::npos ); return sWynik; } int main() { std::string tekst = "<b>to jest </b> testowy napis <b>:)"; std::cout << konwertuj( tekst ) << std::endl; return 0; }
Zadaniem jest zamiana <.b> na [.b] i </b> na [/b] w tekście (spacjami zajmę się potem). Pod koniec pętli dałem "cout", aby monitorować wartość zmiennej "poz". Po przeskanowaniu tekstu i zmianie fraz "poz" zamiast dać npos daje 4294967295. Nie rozumiem dlaczego tak się dzieje. |
|
Rashmistrz |
» 2017-08-11 22:16:30 "poz" zamiast dać npos daje 4294967295 | std::string::npos to tak na prawdę -1. Jako że size_t jest unsigned to -1 przekręca się na liczbę dodatnią. Di Ent. |
|
TwardyOrzech Temat założony przez niniejszego użytkownika |
» 2017-08-12 20:43:14 No właśnie nie di ent, bo pętla zamiast się zatrzymać, leci dalej. |
|
mokrowski |
» 2017-08-12 21:19:30 Podpowiedzi: 1. Zmienna poz nie powinna być typu size_t tylko std::string::size_type . 2. Ile masz razy zdefiniowane poz ? 3. Ile znaków usuwasz w .erase(...) ? 4. Czy nie warto użyć .replace(...) ? 5. Czy .find(...) powinno zawsze szukać od początku stringu? |
|
Rashmistrz |
» 2017-08-12 22:41:23 Wyjaśniłem to co powiedziałeś, że nie rozumiesz. Nie mówiłeś, że masz jakiś inny problem z pętlą. BTW Problemem jest przysłanianie zmiennych i używanie niezainicjalizowanej zmiennej. Deklarujesz nową zmienną poz wewnątrz pętli, która przysłania zmienną poz spoza pętli. Zaś w warunku while jest używana niezainicjalizowana zmienna. Wystarczy, że zamienisz deklaracje wewnątrz pętel na zwykłe przypisania. |
|
TwardyOrzech Temat założony przez niniejszego użytkownika |
» 2017-08-13 16:59:49 Dzięki, pomogło :). Zamykam temat. |
|
« 1 » |