Witam wykonuje zadanie z kursu programowanie na stronie cpp0x które brzmi następująco:
Zadanie domowe
Napisz program, który z podanego łańcucha znaków usunie powtarzające się spacje występujące obok siebie i zastąpi wszystkie znaczniki <b> oraz </b> znacznikami [b] oraz [/b]. Tekst, który powstanie w wyniku przeprowadzenia wspomnianych operacji wypisz na ekran. Przykładowy fragment aplikacji, który możesz wykorzystać:
#include <iostream>
#include <string>
std::string konwertuj( std::string & sTekst )
{
std::string sWynik;
//TODO: tu należy napisać kod realizujący zadanie
return sWynik;
}
int main()
{
std::string tekst = "<b>to jest </b> testowy napis <b>:)";
std::cout << konwertuj( tekst ) << std::endl;
return 0;
}
//Oczekiwane wyjście programu:
//[b]to jest [/b] testowy napis [b]:
Napisałem następujący kod i pytanie czy da się zrobić to jakoś krócej/lepiej?
//Napisz program, który z podanego łańcucha znaków usunie powtarzające się spacje
//występujące obok siebie i zastąpi wszystkie znaczniki <b> oraz </b> znacznikami [b] oraz [/b].
//Tekst, który powstanie w wyniku przeprowadzenia wspomnianych operacji wypisz na ekran. Przykładowy fragment aplikacji, który możesz wykorzystać:
#include <iostream>
#include <string>
using namespace std;
void szukajspacji(string &stekst,string fraza)
{while (string::npos)
{
size_t pozycja=stekst.find(fraza);
if (pozycja==string::npos)
return;
else
{stekst.erase(pozycja,1); }}}
void szukajb1(string &stekst,string fraza)
{while (string::npos)
{
size_t pozycja=stekst.find(fraza);
if (pozycja==string::npos)
return;
else
{if(fraza=="<b>")
{stekst.erase(pozycja,3);
stekst.insert(pozycja,"[b]");}
else if(fraza=="</b>")
{stekst.erase(pozycja,4);
stekst.insert(pozycja,"[/b]");} }}}
int main()
{
string tekst = "<b>to jest </b> testowy napis <b>:)";
szukajspacji(tekst," ");
szukajb1(tekst,"<b>");
szukajb1(tekst,"</b>");
cout<<tekst;
return 0;
}