Pitäisi saada tulostettavat kirjaimet muokattua DOS:lle sopivaksi.
Alla oleva koodi toteuttaa sen, mutta vain jos tulostettava teksti on laitettu stringin sisään. Miten sen vois saada sillain että ei tarvi erikseen laittaa tekstiä stringii ja sitten tulostaa vaan sen vois heittää suoraan?
#include <iostream> #include <string> using namespace std; ostream &operator<<( ostream &stream, string &str) { stream << muunna_aakkoset(str); return stream; } ... int main() { string str = "Tämä toimii "; cout << str; cout << "mutta, tämä ei toimi!\n"; return 0; }
Miten tuo muunna_aakkoset toimii?
For silmukka, joka käy kirjain kirjaimelta stringin läpi ja muuttaa tarvittaessa kirjaimen tilalle sitä vastaavan kirjainkoodin
string muunna_aakkoset(string str) { for(int i=0;i<int(str.length());i++) { if(str[i] == 'ä') str.replace(i,1,"\x84"); else if(str[i] == 'Ä') str.replace(i,1,"\x8e"); else if(str[i] == 'ö') str.replace(i,1,"\x94"); else if(str[i] == 'Ö') str.replace(i,1,"\x99"); } return str; }
cout << "mutta, tämä ei toimi!\n";
Tuossa merkkijono on const char* tyyppiä.
Tällainen lisä voisi siis auttaa:
ostream &operator<<( ostream &stream, const char *str) { stream << muunna_aakkoset(string(str)); return stream; }
Kiitoksia paljon, nyt toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.