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: Ä
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ä.
Eli aika turha ja huonosti toimiva vinkki.
Kiitos kuitenkin. :)
Kiitos itsellesi! Toivon, että jaksat vielä joskus kehittää vinkkiä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.