Rozdział 28, Operacje na tekście.
Ostatnio zmodyfikowano 2015-03-19 14:43
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ć:( #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; }
|
|
matka5432 |
» 2015-03-18 23:31:51 Nie łatwiej tak? 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/ |
|
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:)
|
|
« 1 » |