Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C++: ctype-kirjasto ja ääkköset

Brebl [02.07.2018 23:14:59]

#

Ctype-kirjaston aliohjelmilla voi esim. muuttaa kirjaimia pienestä isoksi. Oletusarvoisesti kirjasto ei tunnista ääkkösiä, mutta locale asetuksia muuttamalla onnistuu.

//	cout << setlocale(LC_ALL,NULL);	Tämän hetkisen locale asetuksen näyttäminen.
//	setlocale(LC_ALL,"C");			C-locale asetuksen käyttäminen.
//	setlocale(LC_ALL,"");			Paikallisen locale asetuksen käyttäminen.
//	setlocale(LC_ALL,"Finnish_Finland.850");	OEM 850 käyttäminen.

#include <iostream>
using namespace std;
#include <cctype>
#include <clocale>

int main()
{
	char merkki;

	cout << "Oletusarvoinen locale asetus: ";
	cout << setlocale(LC_ALL,NULL); //	Tämän hetkisen locale asetuksen näyttäminen.
	cout << "\nSyötä ääkkönen. ";
	cin >> merkki;
	cout << "Sama isoksi muutettuna: ";
	cout << char (toupper(merkki)) << endl;

	setlocale(LC_ALL,"");		//	Paikallisen locale asetuksen käyttäminen.
	cout << "\nPaikallinen locale asetus: ";
	cout << setlocale(LC_ALL,NULL);
	cout << "\nSyötä ääkkönen. ";
	cin >> merkki;
	cout << "Sama isoksi muutettuna: ";
	cout << char (toupper(merkki)) << endl;

	setlocale(LC_ALL,"Finnish_Finland.850");	//	OEM 850 locale asetus.
	cout << "\nOEM 850 locale asetus: ";
	cout << setlocale(LC_ALL,NULL);
	cout << "\nSyötä ääkkönen. ";
	cin >> merkki;
	cout << "Sama isoksi muutettuna: ";			//	Toimii.
	cout << char (toupper(merkki));

	return 0;
}

Ja tältä se näytti windowsin komentorivillä:

Oletusarvoinen locale asetus: C
Syötä ääkkönen. ä
Sama isoksi muutettuna: ä

Paikallinen locale asetus: Finnish_Finland.1252
Sy"t" ""kk"nen. ä
Sama isoksi muutettuna: "

OEM 850 locale asetus: Finnish_Finland.850
Syötä ääkkönen. ä
Sama isoksi muutettuna: Ä

Metabolix [03.07.2018 09:26:57]

#

Ja tältä se näytti Linuxin komentorivillä:

Oletusarvoinen locale asetus: C
Syötä ääkkönen. ä
Sama isoksi muutettuna: �

Paikallinen locale asetus: LC_CTYPE=fi_FI.UTF-8;LC_NUMERIC=fi_FI.UTF-8;LC_TIME=en_GB.UTF-8;LC_COLLATE=fi_FI.UTF-8;LC_MONETARY=fi_FI.UTF-8;LC_MESSAGES=en_GB.UTF-8;LC_PAPER=fi_FI.UTF-8;LC_NAME=fi_FI.UTF-8;LC_ADDRESS=fi_FI.UTF-8;LC_TELEPHONE=fi_FI.UTF-8;LC_MEASUREMENT=fi_FI.UTF-8;LC_IDENTIFICATION=fi_FI.UTF-8
Syötä ääkkönen. Sama isoksi muutettuna: �

OEM 850 locale asetus: LC_CTYPE=fi_FI.UTF-8;LC_NUMERIC=fi_FI.UTF-8;LC_TIME=en_GB.UTF-8;LC_COLLATE=fi_FI.UTF-8;LC_MONETARY=fi_FI.UTF-8;LC_MESSAGES=en_GB.UTF-8;LC_PAPER=fi_FI.UTF-8;LC_NAME=fi_FI.UTF-8;LC_ADDRESS=fi_FI.UTF-8;LC_TELEPHONE=fi_FI.UTF-8;LC_MEASUREMENT=fi_FI.UTF-8;LC_IDENTIFICATION=fi_FI.UTF-8
Syötä ääkkönen. ä
Sama isoksi muutettuna: �

Eli jos näistä asioista tekee vinkin, pitäisi jotenkin käsitellä sitä, miten saman ohjelman saa toimimaan oikein eri ympäristöissä, tai pitäisi ainakin selvästi kertoa, mitkä ovat vinkin rajoitukset. Nykyään 8-bittiset merkistöt eivät ole riittäviä moneenkaan tarkoitukseen, ja yhä useammin käytetään Unicode-merkistöä, jolloin char-tietotyyppi ei riitä.

Brebl [03.07.2018 17:04:29]

#

Eli aika turha ja huonosti toimiva vinkki.
Kiitos kuitenkin. :)

Metabolix [03.07.2018 17:15:51]

#

Kiitos itsellesi! Toivon, että jaksat vielä joskus kehittää vinkkiä.

Vastaus

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

Tietoa sivustosta