#include <iostream>
#include <string>
#include <map>
std::string numberToString(int value, const std::string& dictionary)
{
int len = dictionary.length();
if(len < 2)
return "bad dictionary";
std::string result = "";
unsigned int _value = value;
do
{
result += dictionary[_value % len];
_value /= len;
}while(_value > 0);
return result;
}
int stringToNumber(const std::string& value, const std::map<char, int>& dec_dictionary)
{
unsigned int result = 0;
int len = dec_dictionary.size();
int vlen = value.length();
if(len > 1)
{
for(unsigned int n = vlen; n--;)
{
result *= len;
result += dec_dictionary.find(value[n])->second;
}
}
return result;
}
int main()
{
std::string dictionary;
std::map<char, int> dec_dictionary;
for(char ch = 'A'; ch <= 'Z'; ++ch)
dictionary += ch;
for(char ch = 'a'; ch <= 'z'; ++ch)
dictionary += ch;
for(const auto& ch : dictionary)
dec_dictionary[ch] = dec_dictionary.size();
std::cout << "Dictionary: " << dictionary.c_str() <<
"\tdec_dictionary size: " << dec_dictionary.size() << std::endl;
int value01 = 4242;
int value02 = -4242;
int value03 = 0;
auto string01 = numberToString(value01, dictionary);
auto string02 = numberToString(value02, dictionary);
auto string03 = numberToString(value03, dictionary);
int decoded_value01 = stringToNumber(string01, dec_dictionary);
int decoded_value02 = stringToNumber(string02, dec_dictionary);
int decoded_value03 = stringToNumber(string03, dec_dictionary);
std::cout <<
"number: " << value01 <<
"\tstring: " << string01.c_str() <<
"\tdecoded_number: " << decoded_value01 << std::endl;
std::cout <<
"number: " << value02 <<
"\tstring: " << string02.c_str() <<
"\tdecoded_number: " << decoded_value02 << std::endl;
std::cout <<
"number: " << value03 <<
"\tstring: " << string03.c_str() <<
"\tdecoded_number: " << decoded_value03 << std::endl;
return 0;
}