Wyświetlanie znaków niekoniecznie zależy od typu na jakim działasz, przede wszystkim od sposobu ich kodowania w konsoli. Jeżeli konsola nie wyświetla polskich znaków diakrytycznych przy const char*, to i nie zrobi tego przy string. Skoro jednak piszesz w C++ to warto operować na klasie string, ponieważ ona zawiera w sobie gotowe metody np. zwracanie długości napisu, ponadto w podobny sposób będziesz mógł działać na kolejnych znakach obiektu string, tak jak przy zwykłym łańcuch znakowym const char*.
Przepraszam za wprowadzenie w błąd i dziękuję za czujność w komentarzach.
#include<iostream>
using namespace std;
int main() {
char tablica[] = "tablica";
// char* lancuch = "tablica"; <-- Próba kowersji string constant na char*
const char* lancuch = "lancuch";
string napis("napis");
cout << "char[]: " << tablica << endl;
cout << "char*: " << lancuch << endl;
cout << "string: " << napis << endl << endl;
//lancuch[0] = 'L'; <- Próba modyfikacji spowoduje błąd
tablica[0] = 'T';
napis.at(0) = 'N';
napis[1] = 'A';
cout << "char[]: " << tablica << endl;
cout << "char*: " << lancuch << endl;
cout << "string: " << napis << endl;
}
Wniosek: Albo działamy na łańcuchu znakowym const char*, albo przechodzimy na string.
I wersja:
...
string jaki_miesiac(int numer_miesiaca) {
string miesiac;
...
II wersja (bez możliwości edycji):
...
const char* jaki_miesiac(int numer_miesiaca) {
const char* miesiac;
...