char to jeden znak, a w case'ach masz dwuznakowe literały - to nie może dobrze działać. Później mnożysz znak przez wartości liczbowe... co ta funkcja zwróci?
Tu masz funkcję, która zamieni jednostkę na mnożnik:
long long unit2multiplier(const char *u ) {
const size_t units_n = 8;
const char* units[units_n] = { "M", "B", "T", "Qa", "Qi", "Sx", "Sp", "Oc" };
long long multip[units_n] = {
1000000,
1000000000,
1000000000000,
1000000000000000,
1000000000000000000,
-1,//1000000000000000000000, // za duże dla long long
-1,//1000000000000000000000000,// za duże dla long long
-1,//1000000000000000000000000000// za duże dla long long
};
for(int i = 0; i < units_n; ++i)
{
if(strncmp(units[i], u, strlen(units[i])) == 0)
return multip[i];
}
return 1;
}
Podumaj jak jej użyć.
Inna opcja to funkcja, która zwraca zera w postaci tekstowej:
const char* unit2zeroes(const char *u ) {
const size_t units_n = 8;
const char* units[units_n] = { "M", "B", "T", "Qa", "Qi", "Sx", "Sp", "Oc" };
const char* zeroes[units_n] = {
"000000",
"000000000",
"000000000000",
"000000000000000",
"000000000000000000",
"000000000000000000000",
"000000000000000000000000",
"000000000000000000000000000"
};
for(int i = 0; i < units_n; ++i)
{
if(strncmp(units[i], u, strlen(units[i])) == 0)
return zeroes[i];
}
return "";
}
//użycie
cout << 4 << unit2zeroes("M") << '\n'; //dla 4M