Forumuri

Clasa de șiruri de caractere Mac C++ - comparație insensibilă la majuscule și minuscule?

T

topi

Poster original
4 decembrie 2006
Katy, Texas
  • 8 iunie 2007
Am căutat într-o referință online (cppreference.com) și cartea mea C++, dar nu am găsit o comparație insensibilă la șiruri de caractere. Cu siguranță există comparații C-String care nu țin cont de majuscule, dar aș prefera să folosesc o comparație C++ dacă există.

(În plus, acum sunt într-o misiune de a-l găsi...)

Mulțumesc, Todd T

topi

Poster original
4 decembrie 2006


Katy, Texas
  • 8 iunie 2007
Bănuiesc că aș putea folosi un set de biți SAU cu un șir cunoscut mai lung decât am nevoie de toate spațiile libere (X'20') și apoi să testez o comparație cu litere mici...

Înțeleg

25 octombrie 2004
  • 8 iunie 2007
Este aproape dincolo de crezut, dar nu cred că biblioteca standard C++ are o diferență între majuscule și minuscule.

Dacă nu doriți sau nu trebuie să vă faceți griji cu privire la locații, atunci:
_stricmp( str1.c_str(), str2.c_str() )
Este cea mai simplă soluție (de asemenea, destul de eficientă).

Localele complică destul de mult lucrurile (ei bine, deficiențele bibliotecii standard sunt cele care fac acest lucru atât de complicat).
Să văd dacă găsesc un link pentru ceva care se ocupă de localuri...
iata unul: http://lafstern.org/matt/col2_new.pdf
Nu știu dacă știe cu adevărat despre ce vorbește, dar se pare că știe. El continuă o vreme despre asta, astfel încât să puteți înțelege problema, dar puteți sări până la capăt și puteți verifica ultimul bloc de cod pentru cea mai bună soluție. T

topi

Poster original
4 decembrie 2006
Katy, Texas
  • 9 iunie 2007
Mulțumesc iSee. Da, probabil că are dreptate. Cu toate acestea, pentru scopurile mele, voi lucra cu coduri de caractere ASCII pe 7 biți și cred că această bucată de cod va fi suficient de bună.

Mulțumesc pentru confirmare - mă bucur să văd că nu am ratat-o ​​doar.

Todd

Cod: |_+_| T

topi

Poster original
4 decembrie 2006
Katy, Texas
  • 10 iunie 2007
iSee a spus: Dacă nu doriți sau nu trebuie să vă faceți griji cu privire la locații, atunci:
_stricmp( str1.c_str(), str2.c_str() )
Este cea mai simplă soluție (de asemenea, destul de eficientă).

Bine renunt. Unde ai venit _strictmp ?

Todd ÎN

wittegijt

18 februarie 2007
Eindhoven
  • 11 iunie 2007
toddburch a spus: OK, renunț. Unde ai venit _strictmp ?

Todd

Este o chestie cu Windows. Bibliotecile Unix folosesc strcasecmp, este în .

Wittegijt.

Înțeleg

25 octombrie 2004
  • 11 iunie 2007
toddburch a spus: OK, renunț. Unde ai venit _strictmp ?

Todd

OK, scuze că am aruncat asta acolo.

Am crezut că face parte din biblioteca standard C, dar nu este. Apare doar, neoficial, sub diferite nume, în diferite implementări ale bibliotecii C. Deci, nici o comparație fără majuscule nu este o parte oficială a bibliotecii oficiale C. Doamne. Pare o omisiune atât de mare. Sub VS, este _stricmp() sau stricmp(), sub CodeWarrior pentru Mac este stricmp() sau strcasecmp(), iar sub OS X 10.4/Xcode este strcasecmp().

Dacă mă gândesc bine, sublinierea principală ar fi trebuit să-mi dea indiciu.

Cred că dacă doriți să vă conformați standardului C, trebuie să vă implementați propriul dvs. folosind tolower() (sau toupper()) într-o buclă.

Să vedem că o primă trecere ar putea fi (Acesta este din capul meu, cod NU testat):
Cod: |_+_|
Oricum, din nou, scuze pentru sfatul prost. Cred că nu am făcut prea multă codare C/C++ pe Mac OS X unde am vrut să evit API-ul OS (CFString, etc.) încă din zilele CodeWarrior... T

topi

Poster original
4 decembrie 2006
Katy, Texas
  • 11 iunie 2007
Ahhhha. Are sens. Mulțumesc Wittegijt și iSee. Mi-am citit „Enciclopedia C” (Sybex, 1991) și toate (sau o mulțime, cel puțin) cuvintele cheie nestandard de la Microsoft au toate un caracter de subliniere și pentru primul caracter. Ar fi trebuit să mă informeze.

OK, acum să strcasecmp() . Site-ul web cppreference.com pe care l-am folosit pare să fie doar C/C++ standard. Am căutat pe Google un site de referință specific Mac OS X XCode și nu am găsit unul. Care este un site de referință bun pentru Mac OS X C++? Sau, există o referință C++ încorporată în ajutorul XCode undeva și pur și simplu nu am găsit-o? Sau, dacă nu toate acestea, există unul în Centrul de dezvoltare Apple pe care l-am ratat și eu?

Oricât de mari sunt imaginile de disc XCode pe care le descarc și le instalez atunci când mi se solicită, cu siguranță există o referință de limbă acolo pe cineva - adică, chestiile Java pe care le-am descărcat inițial au fost URIAȘE.

Todd

Krevnik

8 septembrie 2003
  • 11 iunie 2007
toddburch a spus: OK, acum să strcasecmp() . Site-ul web cppreference.com pe care l-am folosit pare să fie doar C/C++ standard. Am căutat pe Google un site de referință specific Mac OS X XCode și nu am găsit unul. Care este un site de referință bun pentru Mac OS X C++? Sau, există o referință C++ încorporată în ajutorul XCode undeva și pur și simplu nu am găsit-o? Sau, dacă nu toate acestea, există unul în Centrul de dezvoltare Apple pe care l-am ratat și eu?

Este acolo, dar nu cred că trece peste funcțiile C care sunt în stratul POSIX, doar toate completările Apple la POSIX. Puteți folosi terminalul pentru a accesa paginile de manual pentru unele dintre aceste funcții. „man strcasecmp” vă va duce direct la pagina care vorbește despre acea funcție și vă va descrie cum să o utilizați.

Înțeleg

25 octombrie 2004
  • 11 iunie 2007
Cercetând în Xcode, am găsit un link către această pagină:

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

care este un cuprins pentru tot ce se află în paginile de manual OS X, inclusiv funcțiile bibliotecii C.

Biblioteca de referință Xcode accesează paginile de manual în plus față de alte resurse, astfel încât acestea sunt toate disponibile prin Xcode (folosesc tot timpul „Find Selected Text in API Reference”).

Se pare că funcțiile C sunt în secțiunea 3. Se pare că documentația pentru fiecare funcție conține o secțiune „standard” sau „istoric” care oferă câteva informații despre standardul cu care funcția respectă. Aparent, strcasecmp() a fost mutat de la „string.h” la „strings.h” din motive de conformitate. Nu sunt sigur în ce fel îl face conform. Bănuiesc că înseamnă că funcțiile non-standard nu ar trebui să apară în string.h, așa că l-au mutat într-un fișier de antet diferit. T

topi

Poster original
4 decembrie 2006
Katy, Texas
  • 11 iunie 2007
Aceasta este o pagină de referință grozavă! M-am gândit că informații de genul ăsta erau acolo undeva!