Fórumok

Mac C++ karakterláncosztály – nem érzékeny a kis- és nagybetűk összehasonlítására?

T

szétfolyik

Eredeti plakát
2006. december 4
Katy, Texas
  • 2007. június 8
Nézegettem egy online hivatkozást (cppreference.com) és a C++ könyvemet, de nem találok olyan karakterláncot, amely nem lenne érzékeny az összehasonlításban. Természetesen vannak C-String kis- és nagybetűket nem érzékeny összehasonlítások, de én inkább C++ összehasonlítást használok, ha van ilyen.

(Ráadásul most az a küldetésem, hogy megtaláljam...)

Köszönöm, Todd T

szétfolyik

Eredeti plakát
2006. december 4


Katy, Texas
  • 2007. június 8
Azt hiszem, használhatok egy bitkészletet VAGY egy ismertnél hosszabb, minden üres karakterláncot (X'20'), majd tesztelhetek kisbetűs összehasonlítást...

Látom

2004. október 25
  • 2007. június 8
Szinte hihetetlen, de nem hiszem, hogy a szabványos C++ könyvtárban nincs különbség a kis- és nagybetűk között.

Ha nem akar vagy nem kell aggódnia a nyelvterületek miatt, akkor:
_stricmp( str1.c_str(), str2.c_str() )
A legegyszerűbb megoldás (szintén elég hatékony).

A területi beállítások eléggé bonyolítják a dolgokat (hát igazából a szabványos könyvtár hiányosságai teszik ezt annyira bonyolulttá).
Nézzük, találok-e linket valamihez, ami a területekkel foglalkozik...
itt az egyik: http://lafstern.org/matt/col2_new.pdf
Nem tudom, hogy tényleg tudja-e, miről beszél, de úgy hangzik, hogy tudja. Egy darabig folytatja ezt, hogy megértse a problémát, de ugorhat az aljára, és megnézheti az utolsó kódblokkot a legjobb megoldás érdekében. T

szétfolyik

Eredeti plakát
2006. december 4
Katy, Texas
  • 2007. június 9
Köszönöm iSee. Igen, valószínűleg igaza van. Céljaim érdekében azonban 7 bites ASCII karakterkódokkal fogok dolgozni, és úgy gondolom, hogy ez a kóddarab elég jó lesz.

Köszönöm a megerősítést – örülök, hogy nem csak hiányoztam.

Todd

Kód: |_+_| T

szétfolyik

Eredeti plakát
2006. december 4
Katy, Texas
  • 2007. június 10
Az iSee azt mondta: Ha nem akar vagy nem kell aggódnia a területi beállítások miatt, akkor:
_stricmp( str1.c_str(), str2.c_str() )
A legegyszerűbb megoldás (szintén elég hatékony).

OK, feladom. Hol jöttél rá _stricmp ?

Todd BAN BEN

wittegijt

2007. február 18
Eindhoven
  • 2007. június 11
toddburch azt mondta: OK, feladom. Hol jöttél rá _stricmp ?

Todd

Ez Windows dolog. A Unix könyvtárak strcasecmp-et használnak, ez benne van.

Wittegijt.

Látom

2004. október 25
  • 2007. június 11
toddburch azt mondta: OK, feladom. Hol jöttél rá _stricmp ?

Todd

Oké, elnézést, hogy kidobtam.

Azt hittem, hogy a szabványos C könyvtár része, de nem az. Csak nem hivatalosan, különböző neveken jelenik meg a C könyvtár különféle megvalósításaiban. Tehát a kis- és nagybetűket nem érző összehasonlítás sem hivatalos része a hivatalos C-könyvtárnak. Jesszusom. Ez olyan hatalmas mulasztásnak tűnik. VS alatt _stricmp() vagy stricmp(), CodeWarrior for Mac alatt stricmp() vagy strcasecmp(), OS X 10.4/Xcode alatt pedig strcasecmp().

Ha jobban belegondolok, a vezető aláhúzásnak kellett volna utalnia.

Gondolom, ha meg akarsz felelni a C szabványnak, meg kell valósítanod a sajátodat a tolower() (vagy a toupper()) segítségével egy ciklusban.

Lássuk, az első lépés a következő lehet (ez a fejem búbja, NEM tesztelt kód):
Kód: |_+_|
Mindenesetre még egyszer elnézést a rossz tanácsért. Azt hiszem, nem igazán csináltam sok C/C++ kódolást Mac OS X-en, ahol el akartam kerülni az OS API-t (CFString stb.) a CodeWarrior idők óta... T

szétfolyik

Eredeti plakát
2006. december 4
Katy, Texas
  • 2007. június 11
Ahhhha. Van értelme. Köszönöm Wittegijt & iSee. Olvastam a „C enciklopédiámat” (Sybex, 1991), és minden (vagy legalábbis sok) nem szabványos Microsoft kulcsszónak van aláhúzása is az első karakternél. Tájékoztatni kellett volna.

OK, most már strcasecmp() . Az általam használt cppreference.com webhely csak szabványos C/C++-nak tűnik. Kerestem a Google-ban egy Mac OS X XCode specifikus referenciaoldalt, de nem találtam. Milyen egy jó Mac OS X C++ referenciawebhely? Vagy van valahol egy C++ hivatkozás az XCode súgójába, és csak én nem találtam? Vagy ennek hiányában van olyan az Apple Fejlesztési Központban, amelyet én is kihagytam?

Amilyen nagyok az XCode lemezképek, amelyeket letöltök és telepítek, amikor kérik, biztosan van valakiben egy nyelvi hivatkozás – úgy értem, az eredetileg letöltött Java cucc ÓRIÁSI volt.

Todd

Krevnik

2003. szeptember 8
  • 2007. június 11
toddburch azt mondta: OK, most strcasecmp() . Az általam használt cppreference.com webhely csak szabványos C/C++-nak tűnik. Kerestem a Google-ban egy Mac OS X XCode specifikus referenciaoldalt, de nem találtam. Milyen egy jó Mac OS X C++ referenciawebhely? Vagy van valahol egy C++ hivatkozás az XCode súgójába, és csak én nem találtam? Vagy ennek hiányában van olyan az Apple Fejlesztési Központban, amelyet én is kihagytam?

Ott van, de nem hiszem, hogy átmegy a POSIX rétegben található C függvényeken, csak az Apple összes kiegészítésein a POSIX-hez. A terminál segítségével hozzáférhet e funkciók némelyikéhez tartozó kézikönyvoldalhoz. A „man strcasecmp” közvetlenül arra az oldalra visz, amely a funkcióról szól, és leírja, hogyan kell használni.

Látom

2004. október 25
  • 2007. június 11
Az Xcode-ban bökve találtam egy linket erre az oldalra:

http://developer.apple.com/documentation/Darwin/Reference/ManPages/index.html

amely egy tartalomjegyzék az OS X kézikönyvoldalain mindenhez, beleértve a C könyvtár funkcióit is.

Az Xcode referenciakönyvtár más erőforrásokon kívül a kézikönyvoldalakat is eléri, így ezek mind elérhetők az Xcode-on keresztül (mindig a „Kijelölt szöveg keresése az API-referenciában” funkciót használom).

Úgy tűnik, hogy a C függvények a 3. részben találhatók. Úgy tűnik, hogy az egyes függvények dokumentációja tartalmaz egy „standard” vagy „history” részt, amely némi információt ad arról, hogy a függvény milyen szabványnak felel meg. Nyilvánvalóan a strcasecmp() megfelelőségi okokból átkerült a „string.h”-ból a „strings.h”-ba. Nem tudom pontosan, hogy ez milyen módon teszi megfelelővé. Gondolom ez azt jelenti, hogy a nem szabványos függvények nem jelenhetnek meg a string.h-ban, ezért áthelyezték egy másik fejlécfájlba. T

szétfolyik

Eredeti plakát
2006. december 4
Katy, Texas
  • 2007. június 11
Ez egy remek referencia oldal! Gondoltam, valahol ilyen infók vannak!