Forum

Classe de chaînes Mac C++ - comparaison insensible à la casse ?

T

fondre

Affiche originale
4 déc. 2006
Katy, Texas
  • 8 juin 2007
J'ai regardé dans une référence en ligne (cppreference.com) et mon livre C++, mais je ne trouve pas de comparaison insensible aux chaînes (). Il existe certainement des comparaisons insensibles à la casse C-String, mais je préférerais utiliser une comparaison C++ s'il y en a une.

(En plus, maintenant je suis en mission pour le trouver...)

Merci Todd T

fondre

Affiche originale
4 déc. 2006


Katy, Texas
  • 8 juin 2007
Je suppose que je pourrais utiliser un bitset OU avec une chaîne connue plus longue que nécessaire de tous les blancs (X'20'), puis tester une comparaison en minuscules...

je vois

25 octobre 2004
  • 8 juin 2007
C'est presque inimaginable, mais je ne crois pas que la bibliothèque C++ standard ait une insensibilité à la casse.

Si vous ne voulez pas ou n'avez pas besoin de vous soucier des paramètres régionaux, alors :
_stricmp( str1.c_str(), str2.c_str() )
Est la solution la plus simple (également assez efficace).

Les paramètres régionaux compliquent un peu les choses (enfin, ce sont vraiment les lacunes de la bibliothèque standard qui rendent cela si compliqué).
Laissez-moi voir si je peux trouver un lien pour quelque chose qui traite des paramètres régionaux...
en voici un : http://lafstern.org/matt/col2_new.pdf
Je ne sais pas s'il sait vraiment de quoi il parle, mais on dirait qu'il le sait. Il continue pendant un certain temps à ce sujet afin que vous puissiez comprendre le problème, mais vous pouvez passer en bas et consulter le dernier bloc de code pour sa meilleure solution. T

fondre

Affiche originale
4 déc. 2006
Katy, Texas
  • 9 juin 2007
Merci iSee. Oui, il a probablement raison. Cependant, pour mes besoins, je travaillerai avec des codes de caractères ASCII 7 bits, et je pense que ce morceau de code sera assez bon.

Merci pour la confirmation - heureux de voir que je ne l'ai pas simplement manqué.

Todd

Code : |_+_| T

fondre

Affiche originale
4 déc. 2006
Katy, Texas
  • 10 juin 2007
iSee a dit : Si vous ne voulez pas ou n'avez pas besoin de vous soucier des paramètres régionaux, alors :
_stricmp( str1.c_str(), str2.c_str() )
Est la solution la plus simple (également assez efficace).

D'accord, j'abandonne. Où es-tu venu avec _stricmp ?

Todd DANS

wittegijt

18 févr. 2007
Eindhoven
  • 11 juin 2007
toddburch a dit : OK, j'abandonne. Où es-tu venu avec _stricmp ?

Todd

C'est un truc de Windows. Les bibliothèques Unix utilisent strcasecmp, c'est au format .

Wittegijt.

je vois

25 octobre 2004
  • 11 juin 2007
toddburch a dit : OK, j'abandonne. Où es-tu venu avec _stricmp ?

Todd

OK, désolé d'avoir jeté ça là-bas.

Je pensais que cela faisait partie de la bibliothèque C standard, mais ce n'est pas le cas. Il apparaît simplement, officieusement, sous différents noms, dans diverses implémentations de la bibliothèque C. Ainsi, une comparaison insensible à la casse n'est pas non plus une partie officielle de la bibliothèque C officielle. Bon sang. Cela semble être une énorme omission. Sous VS, c'est _stricmp() ou stricmp(), sous CodeWarrior pour Mac c'est stricmp() ou strcasecmp(), et sous OS X 10.4/Xcode c'est strcasecmp().

À bien y penser, le trait de soulignement principal aurait dû me donner un indice.

Je suppose que si vous voulez vous conformer au standard C, vous devez implémenter le vôtre en utilisant tolower() (ou toupper()) dans une boucle.

Voyons qu'un premier passage pourrait être (C'est du haut de ma tête, PAS de code testé):
Code : |_+_|
Quoi qu'il en soit, encore une fois, désolé pour le mauvais conseil. Je suppose que je n'ai pas vraiment fait beaucoup de codage C/C++ sur Mac OS X où je voulais éviter l'API du système d'exploitation (CFString, etc.) depuis l'époque de CodeWarrior... T

fondre

Affiche originale
4 déc. 2006
Katy, Texas
  • 11 juin 2007
Ahhhha. Logique. Merci Wittegijt et iSee. J'ai lu mon « Encyclopédie C » (Sybex, 1991) et tous (ou beaucoup, du moins) les mots-clés non standard de Microsoft ont également un trait de soulignement pour le premier caractère. J'aurais dû me prévenir.

OK, maintenant à strcasecmp() . Le site Web cppreference.com que j'utilise semble n'être que du C/C++ standard. J'ai recherché sur Google un site de référence spécifique à Mac OS X XCode et je n'en ai pas trouvé. Qu'est-ce qu'un bon site Web de référence Mac OS X C++ ? Ou existe-t-il une référence C++ intégrée à l'aide de XCode quelque part et je ne l'ai tout simplement pas trouvée ? Ou, à défaut, y en a-t-il un sur le Centre de développement Apple que j'ai également raté ?

Aussi grandes que soient les images de disque XCode que je télécharge et installe lorsque vous y êtes invité, il y a sûrement une référence de langue dans quelqu'un - je veux dire, le contenu Java que j'ai téléchargé au départ était ÉNORME.

Todd

Krevnik

8 sept. 2003
  • 11 juin 2007
toddburch a dit : OK, maintenant strcasecmp() . Le site Web cppreference.com que j'utilise semble n'être que du C/C++ standard. J'ai recherché sur Google un site de référence spécifique à Mac OS X XCode et je n'en ai pas trouvé. Qu'est-ce qu'un bon site Web de référence Mac OS X C++ ? Ou existe-t-il une référence C++ intégrée à l'aide de XCode quelque part et je ne l'ai tout simplement pas trouvée ? Ou, à défaut, y en a-t-il un sur le Centre de développement Apple que j'ai également raté ?

C'est là, mais je ne pense pas qu'il passe en revue les fonctions C qui se trouvent dans la couche POSIX, juste tous les ajouts d'Apple à POSIX. Vous pouvez utiliser le terminal pour accéder aux pages de manuel sur certaines de ces fonctions. 'man strcasecmp' vous amènera directement à la page parlant de cette fonction et décrira comment l'utiliser.

je vois

25 octobre 2004
  • 11 juin 2007
En fouillant dans Xcode, j'ai trouvé un lien vers cette page :

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

qui est une table des matières pour tout dans les pages de manuel OS X, y compris les fonctions de la bibliothèque C.

La bibliothèque de référence Xcode accède aux pages de manuel en plus d'autres ressources, elles sont donc toutes disponibles via Xcode (j'utilise tout le temps 'Rechercher le texte sélectionné dans la référence API').

Il semble que les fonctions C se trouvent dans la section 3. Il semble que la documentation de chaque fonction contienne une section « standard » ou « historique » qui donne des informations sur la norme à laquelle la fonction est conforme. Apparemment, strcasecmp() a été déplacé de 'string.h' à 'strings.h' pour des raisons de conformité. Je ne sais pas exactement de quelle manière cela le rend conforme. Je suppose que cela signifie que les fonctions non standard ne doivent pas apparaître dans string.h, elles l'ont donc déplacées vers un autre fichier d'en-tête. T

fondre

Affiche originale
4 déc. 2006
Katy, Texas
  • 11 juin 2007
C'est une excellente page de référence ! J'ai pensé que des informations comme celles-là étaient là quelque part !