Forum

Mac C++ strängklass - skiftläge okänslig jämföra?

T

härdsmälta

Originalaffisch
4 december 2006
Katy, Texas
  • 8 juni 2007
Jag har letat i en onlinereferens (cppreference.com) och min C++-bok, men jag kan inte hitta en strängokänslig compare(). Det finns säkert C-String skiftlägesokänsliga jämförelser, men jag skulle hellre använda en C++ jämförelse om det finns en.

(Dessutom är jag på uppdrag att hitta den...)

Tack, Todd T

härdsmälta

Originalaffisch
4 december 2006


Katy, Texas
  • 8 juni 2007
Jag antar att jag skulle kunna använda en bituppsättning ELLER med en känd sträng som är längre än vad jag behövde av alla ämnen (X'20') och sedan testa för att jämföra små bokstäver...

Jag förstår

25 oktober 2004
  • 8 juni 2007
Det är nästan obegripligt, men jag tror inte att standard C++-biblioteket saknar skiftläge.

Om du inte vill eller behöver oroa dig för lokaler gör du så här:
_stricmp( str1.c_str(), str2.c_str() )
Är den enklaste lösningen (också ganska effektiv).

Lokaler komplicerar saker ganska mycket (ja, det är egentligen bristerna i standardbiblioteket som gör detta så komplicerat).
Får se om jag kan hitta en länk till något som handlar om lokaler...
här är en: http://lafstern.org/matt/col2_new.pdf
Jag vet inte om han verkligen vet vad han pratar om, men det låter som att han gör det. Han fortsätter ett tag om detta så att du kan förstå problemet, men du kan hoppa till botten och kolla in det sista kodblocket för hans bästa lösning. T

härdsmälta

Originalaffisch
4 december 2006
Katy, Texas
  • 9 juni 2007
Tack iSee. Ja, han har förmodligen rätt. Men för mina syften kommer jag att arbeta med 7-bitars ASCII-teckenkoder, och jag tror att denna kodbit kommer att vara tillräckligt bra.

Tack för bekräftelsen - glad att se att jag inte bara saknade det.

Todd

Kod: |_+_| T

härdsmälta

Originalaffisch
4 december 2006
Katy, Texas
  • 10 juni 2007
iSee sa: Om du inte vill eller behöver oroa dig för lokaler, då:
_stricmp( str1.c_str(), str2.c_str() )
Är den enklaste lösningen (också ganska effektiv).

OK jag ger upp. Var kom du på _stricmp ?

Todd I

wittegijt

18 februari 2007
Eindhoven
  • 11 juni 2007
toddburch sa: OK, jag ger upp. Var kom du på _stricmp ?

Todd

Det är en Windows-grej. Unix-bibliotek använder strcasecmp, det finns i .

Wittegijt.

Jag förstår

25 oktober 2004
  • 11 juni 2007
toddburch sa: OK, jag ger upp. Var kom du på _stricmp ?

Todd

Okej, förlåt för att jag slängde det där.

Jag trodde att det var en del av standard C-biblioteket, men det är det inte. Det dyker bara upp, inofficiellt, under olika namn, i olika implementeringar av C-biblioteket. Så en skiftlägesokänslig jämförelse är inte heller en officiell del av det officiella C-biblioteket. Jösses. Det verkar vara en sådan enorm försummelse. Under VS är det _stricmp() eller stricmp(), under CodeWarrior för Mac är det stricmp() eller strcasecmp(), och under OS X 10.4/Xcode är det strcasecmp().

När jag tänker på det borde den ledande understrykningen ha gett mig tipset.

Jag antar att om du vill överensstämma med C-standarden måste du implementera din egen med tolower() (eller toupper()) i en loop.

Låt oss se att ett första pass kan vara (det här är från toppen av mitt huvud, INTE testad kod):
Kod: |_+_|
Hur som helst, igen, förlåt för det dåliga rådet. Jag antar att jag inte har gjort mycket C/C++-kodning på Mac OS X där jag ville undvika OS API (CFString, etc.) sedan CodeWarriors dagar... T

härdsmälta

Originalaffisch
4 december 2006
Katy, Texas
  • 11 juni 2007
Ahhhha. Är vettigt. Tack Wittegijt & iSee. Jag har läst mitt 'Encyclopedia C' (Sybex, 1991) och alla (eller många, åtminstone) de icke-standardiserade nyckelorden från Microsoft har alla ett understreck för det första tecknet också. Borde ha tipsat mig.

OK, nu till strcasecmp() . Webbplatsen cppreference.com jag har använt ser ut att bara vara standard C/C++. Jag har googlat efter en Mac OS X XCode-specifik referenssida och inte hittat någon. Vad är en bra referenswebbplats för Mac OS X C++? Eller finns det en C++-referens inbyggd i XCode-hjälpen någonstans och jag har bara inte hittat den? Eller, om inte allt detta, finns det en på Apple Development Center som jag också har missat?

Så stora som XCode-diskbilderna är som jag laddar ner och installerar när jag uppmanas att göra det, det finns säkert en språkreferens där någon - jag menar, Java-grejer jag laddade ner från början var ENORMA.

Todd

Krevnik

8 september 2003
  • 11 juni 2007
toddburch sa: OK, nu till strcasecmp() . Webbplatsen cppreference.com jag har använt ser ut att bara vara standard C/C++. Jag har googlat efter en Mac OS X XCode-specifik referenssida och inte hittat någon. Vad är en bra referenswebbplats för Mac OS X C++? Eller finns det en C++-referens inbyggd i XCode-hjälpen någonstans och jag har bara inte hittat den? Eller, om inte allt detta, finns det en på Apple Development Center som jag också har missat?

Den finns där, men jag tror inte att den går över C-funktionerna som finns i POSIX-lagret, bara alla Apples tillägg till POSIX. Du kan använda terminalen för att komma åt man-sidor på några av dessa funktioner. 'man strcasecmp' tar dig direkt till sidan som talar om den funktionen och beskriver hur du använder den.

Jag förstår

25 oktober 2004
  • 11 juni 2007
När jag letade runt i Xcode hittade jag en länk till denna sida:

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

som är en innehållsförteckning för allt på OS X-man-sidorna, inklusive C-biblioteksfunktionerna.

Xcode-referensbiblioteket får åtkomst till man-sidor utöver andra resurser, så dessa är alla tillgängliga via Xcode (jag använder 'Hitta vald text i API-referens' hela tiden).

Det ser ut som att C-funktionerna finns i avsnitt 3. Det ser ut som att dokumentationen för varje funktion innehåller en 'standard' eller 'historik'-sektion som ger lite info om vilken standard funktionen följer. Tydligen har strcasecmp() flyttats från 'string.h' till 'strings.h' av efterlevnadsskäl. Jag är inte säker på exakt vilket sätt som gör det kompatibelt. Jag antar att det betyder att icke-standardiserade funktioner inte ska visas i string.h, så de flyttade den till en annan rubrikfil. T

härdsmälta

Originalaffisch
4 december 2006
Katy, Texas
  • 11 juni 2007
Det är en bra referenssida! Jag tänkte att sådan information fanns där någonstans!