Witam, mam problem z programem konwertującym liczby rzymskie na arabskie i odwrotnie. W szczególności wyskakuje error (zrzut pamięci) jeśli spróbuję wpisać jakąś liczbę rzymską. Przeanalizowałem swój kod i nie bardzo widzę błąd. W mainie jeszcze nie dokończyłem pracy, najpierw chcę żeby zamieniało dla prostych przypadków. Czy byłby ktoś w stanie pomóc?```
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
const char *rzymskie[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int arabskie[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
bool isInt(string line)
{
bool isInt=true;
try
{
stoi(line);
}
catch(bad_exception ex)
{
isInt=false;
}
return isInt;
}
static string arab2rzym (int arab)
{
string parametr;
for(int i=0; i<13; ++i)
{
while(arab>=arabskie[i])
{
parametr.append(rzymskie[i]);
arab=arab-arabskie[i];
}
}
return parametr;
}
static int rzym2arab (string rzym)
{
int index=0;
for(int i=1; i<rzym.length(); i++)
{
for(int a=0; a<13; a++)
{
if(rzym.at(i)==*rzymskie[a])
{
index=index+arabskie[a];
}
}
}
return index;
if( rzym!=arab2rzym(index) || index>3999 )
{
return 0;
}
}
int main(int argc, char *argv[])
{
for(int i=1; i<argc; i++)
{
if(isInt(argv[i]))
{
if(atoi(argv[i])<1 || atoi(argv[i])>3999)
{
cout << argv[i] << " --> " << "Nieprawidłowa dana \n";
}
else
{
cout << argv[i] << " --> " << arab2rzym(atoi(argv[i])) << "\n";
}
}
else
{
if(rzym2arab(argv[i])!=0)
{
cout << argv[i] << " --> " << rzym2arab(argv[i]) << "\n";
}
}
}
}