Tudna valaki egy példát írni, hogyan lehet C++ <locale> alapján összehasonlítani vagy sorba rendezni (stringeket)?Egyik próbálkozásom (forrás: locale_classes.h):
Template operator to compare two strings using the compare function
of the collate facet in this locale. One use is to provide the
locale to the sort function. For example, a vector v of strings
could be sorted according to locale loc by doing:
std::sort(v.begin(), v.end(), loc);
#include <locale>
#include <vector>
using namespace std;
int main ()
{
locale loc();
vector<string> pb;
pb.push_back("csík");
pb.push_back("ások");
pb.push_back("ésik");
sort(pb.begin(), pb.end(), loc);
return 0;
}
több oldal hibát ír ki.
szaszi
- 3525 megtekintés
Hozzászólások
listázd ki a locale-okat,
$ locale -a
C
POSIX
en_GB
en_GB.iso88591
en_GB.utf8
en_US
en_US.iso88591
en_US.utf8
hu_HU
hu_HU.iso88592
hu_HU.utf8
hungarian
és utána így:
#include <locale>
#include <vector>
using namespace std;
int main ()
{
locale loc("hu_HU");
vector<string> pb;
pb.push_back("csík");
pb.push_back("ások");
pb.push_back("ésik");
sort(pb.begin(), pb.end(), loc);
return 0;
}
- A hozzászóláshoz be kell jelentkezni
No ez hiányzott!
Persze próbáltam már a
loc("hu_HU")
-t is, csak akkor meg más miatt nem volt jó, aztán kiszedtem ezt, stb...
Mindenesetre köszönöm, így jól érzi magát!
szaszi
- A hozzászóláshoz be kell jelentkezni
Na ez nekem is jól jött volna 2-3 héttel ezelőtt, mikor Fejlett Prog-ból magyar neveket rendezett sorrendben tároló telefonkönyv osztályt kellett készíteni..
Bár próbálkoztam locale-val, nálam mindig hibát dobott, akármit próbáltam a locale-val csinálni.
Csak nem te is? :)
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Csak nem SZTE szintén? :)
- A hozzászóláshoz be kell jelentkezni
hehe, mennyi szte-s jar ide 8) en meg most fogok nekiallni az ansi escape szekvencias proginak...
- A hozzászóláshoz be kell jelentkezni
Simán :)
btw. FPT-ből mikor lesznek vizsgák meghirdetve nem tudjátok véletlenül? (alga előadás van, így nemigen tudok bejárni... :D )
---
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
< offtopic >
Nekem tavaly volt, de az fpt1 nem egy nagy téma, inkább már most kezdj el tanulni algára, mert az iszonyúan sok... Egyébként tavaly fpt zh-n volt egy elég gyík template-es feladat, meg egy metaprogramozásos (olyan tömb létrehozása, minek elemszáma fibonacci-szám kell legyen).
< /offtopic >
- A hozzászóláshoz be kell jelentkezni
< off >
Jaja, vagom, hogy alga huzos, de igy is tanultam egesz felevben, mivel eloadason katalogus van, minden gyakon van kiszh + a 2 nagyzh + a 2 kotprogi :)
FPT-re meg minden irott/nyomtatott segedanyag viheto.
Szobatars mar szerzett tavalyrol progikat, tegnap irtam meg nalattk-t meg lnko-t metaval, kinyomtat, bevisz; faktorialis, fibonacci, max, megvan tavalyiaktol, primtesztelot megcsinaltuk oran, de rossz meghajton van, igy itthonrol nem erem el.. :).
< /off >
---
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
hat nemtom, lehet csak makom volt, de nekem anno az algam 70%-os lett egy ejszakas tanulassal... elotte elmeletet nem nagyon lattam azon kivul, amirol gyakon szo volt 8)
- A hozzászóláshoz be kell jelentkezni
Én is már jó ideje küzdök a locale-lal, de már kezd tisztulni a kép...
pl. az összehasonlításnál (azt is lehet!):
loc("k", "ő")
nem jó, de
loc( string("k"), string("ő") )
már igen.
Ahogy lassan belemélyedek, vélek némi logikát is felfedezni benne... :-)
szaszi
- A hozzászóláshoz be kell jelentkezni
Ezt kifejtenéd bővebben? Itt mi a loc?
KisKresz
- A hozzászóláshoz be kell jelentkezni
Ugyanaz, mint fennebb :-)
#include <locale>
#include <string>
using namespace std;
int main() {
locale loc("hu_HU");
if ( loc( string("k"), string("é") ) ) { kisebb... }
else { nagyobb... }
...
- A hozzászóláshoz be kell jelentkezni
Nekem ez lefordul, de elszáll.
KisKresz
- A hozzászóláshoz be kell jelentkezni
Hibaüzenet?
Tipikusan akkor, ha nincs olyan locale a rendszeredben. A
locale -a
parancs mit mond?
szaszi
- A hozzászóláshoz be kell jelentkezni
Nekem is szétszáll (FreeBSD 6.2-kb)
$ g++ --version:
g++ (GCC) 3.4.6 [FreeBSD] 20060305
$ locale -a |fgrep hu_HU
hu_HU.ISO8859-2
hu_HU.UTF-8
$ cat loc.cxx
#include <locale>
#include <vector>
using namespace std;
int main ()
{
locale loc("hu_HU.ISO8859-2");
vector<string> pb;
pb.push_back("csík");
pb.push_back("ások");
pb.push_back("ésik");
sort(pb.begin(), pb.end(), loc);
return 0;
}
$ ./loc
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Abort trap (core dumped)
$
- A hozzászóláshoz be kell jelentkezni
Nekem nincs hu_HU.ISO8859-2, csak hu_HU-val irtam be, ugy le is fut.
Probald ki igy is!
szaszi
- A hozzászóláshoz be kell jelentkezni
Nme figyeltel. Ott van az elejen a locale -a kimenete. Mivel ez FreeBSD, ezert itt picit masok a konvenciok, itt *nincs* hu_HU. A kerdes meg all.
- A hozzászóláshoz be kell jelentkezni
Akkor nem, utána meg amikor elkezdtem írni, hogy "bocs, nem figyeltem", akkor elszállt a gépem :-(
szaszi
- A hozzászóláshoz be kell jelentkezni