Forums

Mac C++ tekenreeksklasse - case ongevoelig vergelijken?

t

smelten

originele poster
4 december 2006
Katy, Texas
  • 8 juni 2007
Ik heb in een online referentie (cppreference.com) en mijn C++-boek gekeken, maar ik kan geen string-ongevoelige Compare() vinden. Er zijn zeker C-String hoofdletterongevoelige vergelijkingen, maar ik gebruik liever een C++ vergelijking als die er is.

(Bovendien ben ik nu op een missie om het te vinden...)

Bedankt, Todd t

smelten

originele poster
4 december 2006


Katy, Texas
  • 8 juni 2007
Ik denk dat ik een bitset OF zou kunnen gebruiken met een bekende langer dan ik nodig had reeks van alle spaties (X'20') en dan testen op een vergelijking in kleine letters...

ik snap het

25 okt 2004
  • 8 juni 2007
Het is bijna niet te geloven, maar ik geloof niet dat de standaard C++-bibliotheek hoofdlettergevoelig is.

Als u zich geen zorgen wilt of hoeft te maken over de landinstellingen, doet u het volgende:
_stricmp( str1.c_str(), str2.c_str() )
Is de eenvoudigste oplossing (ook behoorlijk efficiënt).

Locales maken de zaken behoorlijk ingewikkeld (nou, het zijn echt de tekortkomingen van de standaardbibliotheek die dit zo ingewikkeld maken).
Eens kijken of ik een link kan vinden voor iets dat met locales te maken heeft...
hier is er een: http://lafstern.org/matt/col2_new.pdf
Ik weet niet of hij echt weet waar hij het over heeft, maar het klinkt alsof hij dat wel doet. Hij gaat hier een tijdje over door, zodat je het probleem kunt begrijpen, maar je kunt helemaal naar beneden gaan en het laatste codeblok bekijken voor zijn beste oplossing. t

smelten

originele poster
4 december 2006
Katy, Texas
  • 9 juni 2007
Bedankt iSee. Ja, hij heeft waarschijnlijk gelijk. Voor mijn doeleinden zal ik echter werken met 7-bit ASCII-tekencodes, en ik denk dat dit stuk code goed genoeg zal zijn.

Bedankt voor de bevestiging - blij om te zien dat ik het niet alleen miste.

Todd

Code: |_+_| t

smelten

originele poster
4 december 2006
Katy, Texas
  • 10 juni 2007
iSee zei: Als je je geen zorgen wilt of hoeft te maken over locaties, dan:
_stricmp( str1.c_str(), str2.c_str() )
Is de eenvoudigste oplossing (ook behoorlijk efficiënt).

Oke ik geef op. Waar ben je op gekomen? _stricmp ?

Todd IN

witterijt

18 februari 2007
Eindhoven
  • 11 juni 2007
toddburch zei: OK, ik geef het op. Waar ben je op gekomen? _stricmp ?

Todd

Het is een Windows-ding. Unix-bibliotheken gebruiken strcasecmp, het is in .

Witteijt.

ik snap het

25 okt 2004
  • 11 juni 2007
toddburch zei: OK, ik geef het op. Waar ben je op gekomen? _stricmp ?

Todd

Oké, sorry dat ik dat hier weggooi.

Ik dacht dat het deel uitmaakte van de standaard C-bibliotheek, maar dat is het niet. Het verschijnt gewoon, onofficieel, onder verschillende namen, in verschillende implementaties van de C-bibliotheek. Dus een hoofdletterongevoelige vergelijking is ook geen officieel onderdeel van de officiële C-bibliotheek. Jeetje. Het lijkt zo'n enorme omissie. Onder VS is het _stricmp() of stricmp(), onder CodeWarrior voor Mac is het stricmp() of strcasecmp(), en onder OS X 10.4/Xcode is het strcasecmp().

Nu ik erover nadenk, het leidende onderstrepingsteken had me de hint moeten geven.

Ik denk dat als je wilt voldoen aan de C-standaard, je je eigen moet implementeren met tolower() (of toupper()) in een lus.

Laten we eens kijken of een eerste pas kan zijn (dit is uit mijn hoofd, NIET geteste code):
Code: |_+_|
Hoe dan ook, nogmaals sorry voor het slechte advies. Ik denk dat ik niet echt veel C/C++-codering heb gedaan op Mac OS X, waar ik de OS API (CFString, enz.) wilde vermijden sinds de CodeWarrior-dagen... t

smelten

originele poster
4 december 2006
Katy, Texas
  • 11 juni 2007
Ahhh. Klinkt logisch. Bedankt Witteijt & iSee. Ik heb mijn 'Encyclopedia C' (Sybex, 1991) gelezen en alle (of veel van, althans) de niet-standaard trefwoorden van Microsoft hebben allemaal een onderstrepingsteken voor het eerste teken. Had me moeten tippen.

OK, nu naar strcasecmp() . De cppreference.com-website die ik gebruik, lijkt alleen standaard C/C++ te zijn. Ik heb gegoogeld naar een Mac OS X XCode-specifieke referentiesite en heb er geen gevonden. Wat is een goede Mac OS X C++-referentiewebsite? Of is er ergens een C++-referentie ingebouwd in XCode-help en heb ik die gewoon niet gevonden? Of, als dat allemaal niet lukt, is er een in het Apple Development Center die ik ook heb gemist?

Hoe groot de XCode-schijfkopieën ook zijn die ik download en installeer wanneer daarom wordt gevraagd, er zit zeker een taalverwijzing in - ik bedoel, de Java-dingen die ik aanvankelijk downloadde waren GROOT.

Todd

Krevnik

8 sep. 2003
  • 11 juni 2007
toddburch zei: OK, nu naar strcasecmp() . De cppreference.com-website die ik gebruik, lijkt alleen standaard C/C++ te zijn. Ik heb gegoogeld naar een Mac OS X XCode-specifieke referentiesite en heb er geen gevonden. Wat is een goede Mac OS X C++-referentiewebsite? Of is er ergens een C++-referentie ingebouwd in XCode-help en heb ik die gewoon niet gevonden? Of, als dat allemaal niet lukt, is er een in het Apple Development Center die ik ook heb gemist?

Het is er, maar ik denk niet dat het over de C-functies in de POSIX-laag gaat, alleen over alle toevoegingen van Apple aan POSIX. U kunt de terminal gebruiken om toegang te krijgen tot man-pagina's voor sommige van deze functies. 'man strcasecmp' brengt je rechtstreeks naar de pagina waar het over die functie gaat en beschrijft hoe je het moet gebruiken.

ik snap het

25 okt 2004
  • 11 juni 2007
Na wat rondneuzen in Xcode vond ik een link naar deze pagina:

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

dat is een inhoudsopgave voor alles in de OS X-manpagina's, inclusief de C-bibliotheekfuncties.

De Xcode-referentiebibliotheek heeft naast andere bronnen ook toegang tot man-pagina's, dus deze zijn allemaal beschikbaar via Xcode (ik gebruik altijd 'Vind geselecteerde tekst in API-referentie').

Het lijkt erop dat de C-functies in sectie 3 staan. Het lijkt erop dat de documentatie voor elke functie een 'standaard'- of 'geschiedenis'-sectie bevat die informatie geeft over aan welke standaard de functie voldoet. Blijkbaar is strcasecmp() om nalevingsredenen verplaatst van 'string.h' naar 'strings.h'. Ik weet niet precies op welke manier dat het compliant maakt. Ik denk dat dit betekent dat niet-standaard functies niet in string.h mogen voorkomen, dus hebben ze het naar een ander headerbestand verplaatst. t

smelten

originele poster
4 december 2006
Katy, Texas
  • 11 juni 2007
Dat is een geweldige referentiepagina! Ik dacht dat dat soort informatie daar ergens in stond!