• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zadanie Modyfikowanie tekstu i sprawdzanie jego długości c++

Object Storage Arubacloud
0 głosów
848 wizyt
pytanie zadane 1 lipca 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)

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;
}

 

komentarz 1 lipca 2018 przez Michał Gibas Pasjonat (19,610 p.)
Polecame poprawić formatowanie kodu bo czyta się to okropnie ;/

2 odpowiedzi

0 głosów
odpowiedź 1 lipca 2018 przez 10kw10 Pasjonat (22,880 p.)
ja bym przelecial petla po stringu i kazdy znak '<' zastapil '[' i analogicznie '>' na ']'
komentarz 1 lipca 2018 przez JAKUBW Nałogowiec (33,470 p.)

To jest źle rozwiązanie bo gdy dam string <<i><b>><> to otrzymam [[i][b]][] a powinienem otrzymać <<i>[b]><>

0 głosów
odpowiedź 1 lipca 2018 przez niezalogowany
#include <algorithm>
#include <iostream>
#include <string>

void removeMultipliedCharacter(std::string &str, char c)
{
	str.erase(
		std::unique(str.begin(), str.end(), [&c](char left, char right) {return left == right && right == c; }),
		str.end()
	);
}

void replaceAll(std::string& str, const std::string& from, const std::string& to)
{
	std::string::size_type findPos;
	while ((findPos = str.find(from)) != std::string::npos)
	{
		str.replace(findPos, from.length(), to);
	}
}

void prepare(std::string& text)
{
	removeMultipliedCharacter(text, ' ');
	replaceAll(text, "<b>", "[b]");
	replaceAll(text, "</b>", "[/b]");
}

int main()
{
	std::string text = "<b>to jest </b> testowy       napis     <b>:)";
	std::cout << text << "\n";
	prepare(text);
	std::cout << text << "\n";
}
komentarz 1 lipca 2018 przez criss Mędrzec (172,590 p.)
Autor nie prosił o gotowy kod, więc twoja odpowiedź jest troche nie na miejscu :/

Podobne pytania

0 głosów
1 odpowiedź 3,398 wizyt
0 głosów
2 odpowiedzi 159 wizyt
pytanie zadane 24 marca 2016 w C i C++ przez szymi666 Bywalec (2,020 p.)
0 głosów
2 odpowiedzi 264 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...