• 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

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
221 wizyt
pytanie zadane 9 października 2019 w C i C++ przez amelia.cpp Obywatel (1,860 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 9 października 2019 przez tkz Nałogowiec (41,900 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 9 października 2019 przez tkz Nałogowiec (41,900 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ź 153 wizyt
0 głosów
3 odpowiedzi 542 wizyt
pytanie zadane 12 września 2015 w C i C++ przez jarosz9000 Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 1,749 wizyt
pytanie zadane 21 sierpnia 2016 w C i C++ przez mariuszd312 Nowicjusz (200 p.)

89,745 zapytań

138,348 odpowiedzi

309,377 komentarzy

59,659 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 747p. - Argeento
  2. 696p. - Mikbac
  3. 693p. - Michal Drewniak
  4. 692p. - rucin93
  5. 688p. - Łukasz Eckert
  6. 679p. - ssynowiec
  7. 678p. - TheLukaszNs
  8. 654p. - JMazurkiewicz
  9. 645p. - Hubert Chęciński
  10. 645p. - Jarosław Roszyk
  11. 640p. - adrian17
  12. 592p. - nidomika
  13. 506p. - tokox
  14. 501p. - Rafał Budzis
  15. 498p. - overcq
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

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

...