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

SPOJ WI_TRIGR - Zastępowanie trójznaków

0 głosów
31 wizyt
pytanie zadane 4 dni temu w C i C++ przez amelia.cpp Obywatel (1,220 p.)

Cześć, robię zadanie ze SPOJ'a i mam problem...

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	string str;
	vector<string> vect;
	while (cin >> str)
	{
		vect.push_back(str);
	}
	for (int i=0; i<vect.size(); i++)
	{
		vect[i].replace(vect[i].find("??="),sizeof("??=")-1, "#");
		vect[i].replace(vect[i].find("??/"),sizeof("??/")-1, "\\");
		vect[i].replace(vect[i].find("??'"), sizeof("??'") - 1, "^");
		vect[i].replace(vect.at(i).find("??("), sizeof("??(")-1, "[");
		vect[i].replace(vect.at(i).find("??)"),sizeof("??)")-1, "]");
		vect[i].replace(vect.at(i).find("??!"), sizeof("??!")-1, "|");
		vect[i].replace(vect.at(i).find("??<"), sizeof("??<")-1, "{");
		vect[i].replace(vect.at(i).find("??>"), sizeof("??>")-1, "}");
		vect[i].replace(vect.at(i).find("??-"), sizeof("??-")-1, "~");
	}
	for (auto it = vect.begin(); it != vect.end(); ++it)
	{
		cout << *it;
	}
}

kod zwraca wyjątek std::out_of_range

Wcześniej próbowałam jeszcze zrobić coś takiego

if(vect[i].find("??=") != string::npos) vect[i].replace(vect[i].find("??="),sizeof("??=")-1, "#");

niestety działo się to samo.

Proszę o pomoc

komentarz 4 dni temu przez tkz Dyskutant (8,160 p.)

An iterator to the first element in the range that compares equal to val.
If no elements match, the function returns last.

Źle używasz find. 

http://www.cplusplus.com/reference/algorithm/find/

komentarz 4 dni temu przez tkz Dyskutant (8,160 p.)
#include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <algorithm>
int main(void)
{
	std::string codeToRepair;
	std::getline(std::cin, codeToRepair);
	const std::vector<std::pair<std::string, std::string>> TRIGRAPH{
		{"??=", "#"}, {"??/", "\\"}, {"??'", "^"}, {"??(", "["}, {"??)", "]"}, {"??!", "|"}, {"??<", "{"}, {"??>", "}"}, {"??-", "~"}};
	constexpr std::size_t SIZE_TRIGRAPH = 3;
	for (const auto &i : TRIGRAPH)
	{
		if (std::size_t found = codeToRepair.find(i.first); found != std::string::npos)
		{
			codeToRepair.replace(found, (found + SIZE_TRIGRAPH), i.second);
		}
	}
	std::cout << codeToRepair;
	return 0;
}

Może to Ci trochę rozjaśni. 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 72 wizyt
0 głosów
0 odpowiedzi 113 wizyt
pytanie zadane 17 czerwca 2018 w SPOJ przez Kamil Paradowski Użytkownik (620 p.)
0 głosów
2 odpowiedzi 992 wizyt
pytanie zadane 21 sierpnia 2016 w C i C++ przez mariuszd312 Nowicjusz (180 p.)
Porady nie od parady
Forum posiada swój własny serwer Discord, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

66,985 zapytań

113,890 odpowiedzi

241,338 komentarzy

46,942 pasjonatów

Przeglądających: 197
Pasjonatów: 8 Gości: 189

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...