Rozwiązuję zadanie z serwisu SPOJ: https://pl.spoj.com/problems/JSUMRZYM/ Muszę użyć mapy. Po wpisaniu danych wejściowych program przestaje działać. Nie można wpisać innych danych, ani też nic się nie wyświetla. Czy problem dotyczy funkcji konwertujących, a może zamiany string na int?
#include <iostream>
#include <map>
#include <cstdlib>
#include <algorithm>
#include <string>
using namespace std;
const map < int, string > mapa {
{ 1000, "M" }, { 900, "CM" }, { 500, "D" }, { 400, "CD" }, { 100, "C" }, { 90, "XC" },
{ 50, "L" }, { 40, "XL" }, { 10, "X" }, { 9, "IX" }, { 5, "V" }, { 4, "IV" }, { 1, "I" }
};
int zRzymskiegoNaArabski (string liczba) {
int dlugoscLiczby = liczba.size();
int suma = 0;
int i = 0;
auto iter = mapa.rbegin();
map <int, string> mapa;
while (i < dlugoscLiczby) {
if ((liczba[i] == iter -> second[0]) && (iter -> second.size() == 1)){
suma += iter -> first;
i++;
}
else if (i < dlugoscLiczby - 1 && liczba.substr (i, 2) == (++iter) -> second) {
suma += iter -> first;
i += 2;
--iter;
}
else if (iter != mapa.rend()) {
++iter;
}
}
return suma;
}
string zArabskiegoNaRzymski (int liczba) {
string wynik = " ";
auto iter = mapa.rbegin();
while (liczba > 0) {
if (liczba >= iter -> first) {
liczba -= iter -> first;
wynik += iter -> second;
}
else if (iter != mapa.rend()) {
iter++;
}
}
return wynik;
}
int main()
{
string wynik;
string liczbyRzymskie;
std::string str = " ";
int dlugosc, cyfra;
do {
getline (cin, liczbyRzymskie);
liczbyRzymskie = str;
zRzymskiegoNaArabski(liczbyRzymskie);
cyfra = atoi(str.c_str());
zArabskiegoNaRzymski(cyfra);
wynik += cyfra;
cout << cyfra;
} while (cin.get() != '\n');
return 0;
}