Forum

Mac C++ strengklasse - ufølsom sammenligne?

T

nedsmelting

Original plakat
4. desember 2006
Katy, Texas
  • 8. juni 2007
Jeg har sett i en online referanse (cppreference.com) og C++-boken min, men jeg finner ikke en streng ufølsom compare(). Det er absolutt C-String ufølsomme sammenligninger, men jeg vil heller bruke en C++ sammenligning hvis det er en.

(Pluss, nå er jeg på et oppdrag for å finne den...)

Takk, Todd T

nedsmelting

Original plakat
4. desember 2006


Katy, Texas
  • 8. juni 2007
Jeg antar at jeg kunne bruke et bitsett ELLER med en kjent streng som er lengre enn jeg trengte av alle blanks (X'20') og deretter teste for en liten bokstavsammenligning...

jeg skjønner

25. oktober 2004
  • 8. juni 2007
Det er nesten ufattelig, men jeg tror ikke at standard C++-biblioteket ikke skiller mellom store og små bokstaver.

Hvis du ikke vil eller trenger å bekymre deg for lokaliteter, gjør du følgende:
_stricmp( str1.c_str(), str2.c_str() )
Er den enkleste løsningen (også ganske effektiv).

Lokaliteter kompliserer ting ganske mye (vel, det er egentlig manglene ved standardbiblioteket som gjør dette så komplisert).
La meg se om jeg kan finne en link til noe som omhandler lokaliteter...
her er en: http://lafstern.org/matt/col2_new.pdf
Jeg vet ikke om han egentlig vet hva han snakker om, men det høres ut som han gjør det. Han fortsetter en stund om dette slik at du kan forstå problemet, men du kan hoppe til bunnen og sjekke den siste kodeblokken for den beste løsningen hans. T

nedsmelting

Original plakat
4. desember 2006
Katy, Texas
  • 9. juni 2007
Takk iSee. Ja, han har nok rett. For mitt formål vil jeg imidlertid jobbe med 7-bits ASCII-tegnkoder, og jeg tror denne kodebiten vil være god nok.

Takk for bekreftelsen - glad for å se at jeg ikke bare savnet det.

Todd

Kode: |_+_| T

nedsmelting

Original plakat
4. desember 2006
Katy, Texas
  • 10. juni 2007
iSee sa: Hvis du ikke vil eller trenger å bekymre deg for lokaliteter, så:
_stricmp( str1.c_str(), str2.c_str() )
Er den enkleste løsningen (også ganske effektiv).

OK, jeg gir opp. Hvor kom du på _sricmp ?

Todd I

wittegijt

18. februar 2007
Eindhoven
  • 11. juni 2007
toddburch sa: OK, jeg gir opp. Hvor kom du på _sricmp ?

Todd

Det er en Windows-greie. Unix-biblioteker bruker strcasecmp, det er i .

Wittegijt.

jeg skjønner

25. oktober 2004
  • 11. juni 2007
toddburch sa: OK, jeg gir opp. Hvor kom du på _sricmp ?

Todd

OK, beklager at jeg slengte det ut der.

Jeg trodde det var en del av standard C-biblioteket, men det er det ikke. Det vises bare, uoffisielt, under forskjellige navn, i forskjellige implementeringer av C-biblioteket. Så en sammenligning uten store og små bokstaver er heller ikke en offisiell del av det offisielle C-biblioteket. Jøss. Det virker som en så stor utelatelse. Under VS er det _stricmp() eller stricmp(), under CodeWarrior for Mac er det stricmp() eller strcasecmp(), og under OS X 10.4/Xcode er det strcasecmp().

Når jeg tenker på det, burde den ledende understrekingen ha gitt meg hintet.

Jeg antar at hvis du vil samsvare med C-standarden, må du implementere din egen ved å bruke tolower() (eller toupper()) i en løkke.

La oss se at et første pass kan være (dette er helt oppe i hodet mitt, IKKE testet kode):
Kode: |_+_|
Uansett, igjen, beklager det dårlige rådet. Jeg har vel egentlig ikke gjort mye C/C++-koding på Mac OS X der jeg ønsket å unngå OS API (CFString, etc.) siden CodeWarrior-dagene... T

nedsmelting

Original plakat
4. desember 2006
Katy, Texas
  • 11. juni 2007
Ahhhha. Gir mening. Takk Wittegijt & iSee. Jeg har lest 'Encyclopedia C' (Sybex, 1991) og alle (eller mange av, i det minste) de ikke-standardiserte søkeordene fra Microsoft har alle en understreking for det første tegnet også. Burde tipset meg.

OK, nå til strcasecmp() . Nettstedet cppreference.com jeg har brukt ser ut til å være bare standard C/C++. Jeg har googlet etter et Mac OS X XCode-spesifikt referansenettsted og har ikke funnet noe. Hva er et godt referansenettsted for Mac OS X C++? Eller er det en C++-referanse innebygd i XCode-hjelpen et sted, og jeg har bare ikke funnet den? Eller, hvis ikke alt dette, er det en på Apple Development Center som jeg også har savnet?

Så store som XCode-diskbildene er som jeg laster ned og installerer når jeg blir bedt om det, det er sikkert en språkreferanse der noen - jeg mener, Java-tingene jeg lastet ned i utgangspunktet var ENORME.

Todd

Krevnik

8. september 2003
  • 11. juni 2007
toddburch sa: OK, nå til strcasecmp() . Nettstedet cppreference.com jeg har brukt ser ut til å være bare standard C/C++. Jeg har googlet etter et Mac OS X XCode-spesifikt referansenettsted og har ikke funnet noe. Hva er et godt referansenettsted for Mac OS X C++? Eller er det en C++-referanse innebygd i XCode-hjelpen et sted, og jeg har bare ikke funnet den? Eller, hvis ikke alt dette, er det en på Apple Development Center som jeg også har savnet?

Den er der, men jeg tror ikke den går over C-funksjonene som er i POSIX-laget, bare alle Apples tillegg til POSIX. Du kan bruke terminalen til å få tilgang til man-sider på noen av disse funksjonene. 'man strcasecmp' tar deg rett til siden som snakker om den funksjonen og beskriver hvordan du bruker den.

jeg skjønner

25. oktober 2004
  • 11. juni 2007
Lette rundt i Xcode fant jeg en lenke til denne siden:

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

som er en innholdsfortegnelse for alt på OS X-man-sidene, inkludert C-biblioteksfunksjonene.

Xcode-referansebiblioteket får tilgang til man-sider i tillegg til andre ressurser, så disse er alle tilgjengelige gjennom Xcode (jeg bruker 'Finn valgt tekst i API-referanse' hele tiden).

Det ser ut som om C-funksjonene er i seksjon 3. Det ser ut til at dokumentasjonen for hver funksjon inneholder en 'standard' eller 'historikk' seksjon som gir litt info om hvilken standard funksjonen overholder. Tilsynelatende ble strcasecmp() flyttet fra 'string.h' til 'strings.h' av samsvarsgrunner. Jeg er ikke sikker på nøyaktig hvilken måte som gjør det kompatibelt. Jeg antar at det betyr at ikke-standardfunksjoner ikke skal vises i string.h, så de flyttet den til en annen overskriftsfil. T

nedsmelting

Original plakat
4. desember 2006
Katy, Texas
  • 11. juni 2007
Det er en flott referanseside! Jeg skjønte informasjon som det var der inne et sted!