Fóra

Řetězcová třída Mac C++ - porovnání velkých a malých písmen?

T

roztavit

Původní plakát
4. prosince 2006
Katy, Texas
  • 8. června 2007
Podíval jsem se do online reference (cppreference.com) a do své knihy C++, ale nenašel jsem porovnávací metodu necitlivou na řetězec. Určitě existují srovnání C-String bez ohledu na velikost písmen, ale raději bych použil srovnání v C++, pokud existuje.

(Navíc, teď jsem na misi, abych to našel...)

Díky, Todde T

roztavit

Původní plakát
4. prosince 2006


Katy, Texas
  • 8. června 2007
Myslím, že bych mohl použít bitovou sadu OR se známým řetězcem všech prázdných míst, který je delší, než potřebuji (X'20') a poté otestovat porovnání malých písmen...

Chápu

25. října 2004
  • 8. června 2007
Je to téměř neuvěřitelné, ale nevěřím, že standardní knihovna C++ nerozlišuje malá a velká písmena.

Pokud se nechcete nebo nepotřebujete starat o národní prostředí, pak:
_stricmp( str1.c_str(), str2.c_str() )
Je to nejjednodušší řešení (také docela efektivní).

Locales věci dost komplikují (no, jsou to opravdu nedostatky standardní knihovny, co to dělá tak komplikovaným).
Uvidíme, jestli najdu odkaz na něco, co se zabývá místními prostředími...
tady je jeden: http://lafstern.org/matt/col2_new.pdf
Nevím, jestli opravdu ví, o čem mluví, ale zní to tak, že ví. Chvíli o tom pokračuje, takže problém pochopíte, ale můžete přeskočit až na konec a podívat se na poslední blok kódu, kde najdete jeho nejlepší řešení. T

roztavit

Původní plakát
4. prosince 2006
Katy, Texas
  • 9. června 2007
Díky iSee. Jo, asi má pravdu. Pro své účely však budu pracovat se 7bitovými kódy znaků ASCII a myslím si, že tento kus kódu bude dost dobrý.

Děkuji za potvrzení - jsem rád, že jsem to nepřehlédl.

Todd

Kód: |_+_| T

roztavit

Původní plakát
4. prosince 2006
Katy, Texas
  • 10. června 2007
iSee řekl: Pokud se nechcete nebo nepotřebujete starat o místní nastavení, pak:
_stricmp( str1.c_str(), str2.c_str() )
Je to nejjednodušší řešení (také docela efektivní).

Dobře, vzdávám se. Na co jsi přišel _strimp ?

Todd V

wittegijt

18. února 2007
Eindhoven
  • 11. června 2007
toddburch řekl: Dobře, vzdávám se. Na co jsi přišel _strimp ?

Todd

Je to věc Windows. Unixové knihovny používají strcasecmp, je v .

Wittegijt.

Chápu

25. října 2004
  • 11. června 2007
toddburch řekl: Dobře, vzdávám se. Na co jsi přišel _strimp ?

Todd

Dobře, omlouvám se, že jsem to tam vyhodil.

Myslel jsem, že je součástí standardní knihovny C, ale není. Jen se neoficiálně objevuje pod různými jmény v různých implementacích knihovny C. Porovnání bez rozlišení velkých a malých písmen tedy není oficiální součástí oficiální knihovny C. Bože. Vypadá to jako velké opomenutí. Pod VS je to _stricmp() nebo stricmp(), pod CodeWarrior pro Mac je to stricmp() nebo strcasecmp() a pod OS X 10.4/Xcode je to strcasecmp().

Když se nad tím zamyslím, mělo mi to napovědět hlavní podtržítko.

Myslím, že pokud chcete vyhovět standardu C, musíte implementovat svůj vlastní pomocí tolower() (nebo toupper()) ve smyčce.

Podívejme se, že první průchod může být (toto je z hlavy, NEtestovaný kód):
Kód: |_+_|
Každopádně se ještě jednou omlouvám za špatnou radu. Myslím, že jsem od dob CodeWarrior opravdu neudělal mnoho kódování C/C++ na Mac OS X, kde jsem se chtěl vyhnout OS API (CFString atd.) T

roztavit

Původní plakát
4. prosince 2006
Katy, Texas
  • 11. června 2007
Ahhhha. Dává smysl. Díky Wittegijt & iSee. Četl jsem svou 'Encyklopedii C' (Sybex, 1991) a všechna (nebo alespoň spousta) nestandardních klíčových slov od Microsoftu mají také podtržítko u prvního znaku. Měl mi dát tip.

Dobře, teď k strcasecmp() . Webová stránka cppreference.com, kterou používám, vypadá pouze jako standardní C/C++. Hledal jsem konkrétní referenční stránku Mac OS X XCode a nenašel jsem ji. Jaký je dobrý referenční web Mac OS X C++? Nebo je někde v nápovědě XCode zabudovaná reference C++ a já ji prostě nenašel? Nebo, když to všechno selže, existuje ve vývojovém centru Apple jeden, který jsem také přehlédl?

Jak velké jsou obrazy XCode disků, které si stahuji a instaluji, když jsem vyzváni, určitě tam někdo je odkaz na jazyk - chci říct, že Java věci, které jsem si původně stáhl, byly OBROVSKÉ.

Todd

Krevnik

8. září 2003
  • 11. června 2007
toddburch řekl: Dobře, teď strcasecmp() . Webová stránka cppreference.com, kterou používám, vypadá pouze jako standardní C/C++. Hledal jsem konkrétní referenční stránku Mac OS X XCode a nenašel jsem ji. Jaký je dobrý referenční web Mac OS X C++? Nebo je někde v nápovědě XCode zabudovaná reference C++ a já ji prostě nenašel? Nebo, když to všechno selže, existuje ve vývojovém centru Apple jeden, který jsem také přehlédl?

Je to tam, ale nemyslím si, že to jde přes funkce C, které jsou ve vrstvě POSIX, jen všechny doplňky Apple k POSIX. Terminál můžete použít pro přístup k manuálovým stránkám některých z těchto funkcí. 'man strcasecmp' vás zavede přímo na stránku o této funkci a popíše, jak ji používat.

Chápu

25. října 2004
  • 11. června 2007
Při procházení Xcode jsem našel odkaz na tuto stránku:

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

což je obsah všeho v manuálových stránkách OS X, včetně funkcí knihovny C.

Referenční knihovna Xcode přistupuje kromě jiných zdrojů k manuálovým stránkám, takže jsou všechny dostupné prostřednictvím Xcode (používám 'Find Selected Text in API Reference' neustále).

Vypadá to, že funkce C jsou v sekci 3. Zdá se, že dokumentace pro každou funkci obsahuje sekci „standard“ nebo „historie“, která poskytuje nějaké informace o tom, jakému standardu funkce vyhovuje. Zřejmě bylo strcasecmp() přesunuto z 'string.h' do 'strings.h' z důvodu souladu. Nejsem si jistý, jakým způsobem to přesně vyhovuje. Myslím, že to znamená, že nestandardní funkce by se v string.h neměly objevit, takže to přesunuli do jiného hlavičkového souboru. T

roztavit

Původní plakát
4. prosince 2006
Katy, Texas
  • 11. června 2007
To je skvělá referenční stránka! Myslel jsem, že taková informace tam někde je!