Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[lekcja] Modyfikowanie tekstu i sprawdzanie jego długości-praca domowa

Ostatnio zmodyfikowano 2017-08-13 16:59
Autor Wiadomość
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
C/C++
#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.
P-163923
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.
P-163924
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.
P-163936
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?
P-163938
Rashmistrz
» 2017-08-12 22:41:23
No właśnie nie di ent,
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.
P-163942
TwardyOrzech
Temat założony przez niniejszego użytkownika
» 2017-08-13 16:59:49
Dzięki, pomogło :). Zamykam temat.
P-163949
« 1 »
  Strona 1 z 1