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

Rozdział 28, Operacje na tekście.

Ostatnio zmodyfikowano 2015-03-19 14:43
Autor Wiadomość
hermandos
Temat założony przez niniejszego użytkownika
Rozdział 28, Operacje na tekście.
» 2015-03-18 21:16:19
Witam, zadanie wykonałem ale raz w kodzie zostaje mi podwójna spacja, oraz podobno da się wstawić tekst bez wcześniejszego usuwania, niestety nie wiem jak sobie z tym poradzić:(

C/C++
#include <iostream>
#include <string>
using namespace std;
std::string konwertuj( std::string & sTekst )
{
    cout << sTekst << endl;
    std::string sWynik;
    std::string szukanaFraza = "  ";
    std::string szukanaFraza1 = "</b>";
    std::string szukanaFraza2 = "<b>";
    size_t znalezionaPozycja = sTekst.find( szukanaFraza );
    int tab[ 20 ];
    int i = 0;
   
    size_t znalezionaPozycja1 = sTekst.find( szukanaFraza1 );
    size_t znalezionaPozycja2 = sTekst.find( szukanaFraza2 );
   
    sTekst.erase( znalezionaPozycja2, 3 );
    sTekst.insert( znalezionaPozycja2, "[b]" );
   
    sTekst.erase( znalezionaPozycja1, 4 );
    sTekst.insert( znalezionaPozycja1, "[/b]" );
   
    do
    {
        znalezionaPozycja = sTekst.find( szukanaFraza, znalezionaPozycja + szukanaFraza.size() );
        tab[ i ] = znalezionaPozycja;
        i++;
    } while( znalezionaPozycja != std::string::npos );
   
    for( int n = 0, e = 0; i - 1 > n; n++ )
    {
        sTekst.erase( tab[ n ] - e, 2 );
        e += 2;
    }
    cout << sTekst << endl;
   
    return sWynik;
}
int main()
{
    std::string tekst = "<b>to jest </b> testowy        napis     :)";
    std::cout << konwertuj( tekst ) << std::endl;
    return 0;
}
P-128745
matka5432
» 2015-03-18 23:31:51
Nie łatwiej tak?

C/C++
std::string konwertuj( std::string & sTekst )
{
   
    cout << sTekst << endl;
    std::string sWynik;
    std::string szukanaFraza = "  ";
    std::string szukanaFraza1 = "</b>";
   
    std::string szukanaFraza2 = "<b>";
    size_t znalezionaPozycja = sTekst.find( szukanaFraza );
    int tab[ 20 ];
    int i = 0;
   
    size_t znalezionaPozycja1 = sTekst.find( szukanaFraza1 );
    size_t znalezionaPozycja2 = sTekst.find( szukanaFraza2 );
   
    sTekst.erase( znalezionaPozycja2, 3 );
    sTekst.insert( znalezionaPozycja2, "[b]" );
   
    sTekst.erase( znalezionaPozycja1, 4 );
    sTekst.insert( znalezionaPozycja1, "[/b]" );
   
   
    ///****************
    do
    {
        znalezionaPozycja = sTekst.find( szukanaFraza );
        if( znalezionaPozycja == std::string::npos )
             break;
       
        sTekst.erase( znalezionaPozycja, 1 );
       
    } while( true );
    ///*****************
   
   
   
    cout << sTekst << endl;
   
    return sWynik;
}

Pomiędzy gwiazdkami zastosowałem zmianę. Zobacz jakie to krótkie i nieskomplikowane. Za dużo kombinujesz.

Jeśli chodzi o edycje tekstu bez usuwania to
replace()
.
http://www.cplusplus.com​/reference/string/string​/replace/
P-128762
hermandos
Temat założony przez niniejszego użytkownika
THX
» 2015-03-19 14:43:12
Dzięki, dopiero po 28 rozdziale są szerzej opisane break i continue, więc próbowałem to zrobić po swojemu, nawet udało mi się wypisać tak jak powinno być w wyniku końcowym, ale kod nie byłby uniwersalny dla każdego napisu:)
P-128777
« 1 »
  Strona 1 z 1