podstawowy problem to kodowanie. Chcesz używać znaków z poza zakresu ASCII, ergo musisz użyć takiego samego kodowania w programie jaki jest używany na konsoli (albo zmieniać ustawienie konsoli, tak jak próbowałeś). W drugiej kolejności konsola/terminal musi wspierać odpowiedni zakres znaków, ale współcześnie rzadko to jest problem.
Zaproponowane rozwiązanie to użycie znaków Unicode nie obsługiwane przez kodowanie, które chcesz użyć CP437
.
Najlepiej jeśli cały twój kod użyje jednego kodowania. Najlepiej UTF-8
. Tego samego kodowania użyj do kodu źródłowego dzięki czemu nie będziesz miał problemów z polskimi znakami (kompilator też warto ustawić, ale chyba też domyślnie jest ustawione UTF-8
).
http://ideone.com/HuN8HX
string superscriptNumber(int x) {
static auto superscriptDic = map<char, string> {
{'0', "\xE2\x81\xB0"},
{'1', "\xC2\xB9"},
{'2', "\xC2\xB2"},
{'3', "\xC2\xB3"},
{'4', "\xE2\x81\xB4"},
{'5', "\xE2\x81\xB5"},
{'6', "\xE2\x81\xB6"},
{'7', "\xE2\x81\xB7"},
{'8', "\xE2\x81\xB8"},
{'9', "\xE2\x81\xB9"}
};
string result;
for (auto a : to_string(x)) {
result.append(superscriptDic[a]);
}
return result;
}
Wynik nie jest zbyt ładny ale działa.
Wersja z jawnie wpisanymi znakami: http://ideone.com/h47tKc