Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ääkkösten muunto

Lol-z [07.03.2009 19:42:21]

#

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;
}

Antti Laaksonen [07.03.2009 19:46:30]

#

Miten tuo muunna_aakkoset toimii?

Lol-z [07.03.2009 19:53:53]

#

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;
}

Gaxx [07.03.2009 19:57:04]

#

cout << "mutta, tämä ei toimi!\n";

Tuossa merkkijono on const char* tyyppiä.

Antti Laaksonen [07.03.2009 20:02:06]

#

Tällainen lisä voisi siis auttaa:

ostream &operator<<( ostream &stream, const char *str) {
    stream << muunna_aakkoset(string(str));
    return stream;
}

Lol-z [07.03.2009 20:25:51]

#

Kiitoksia paljon, nyt toimii.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta