>RESOLU<[C] fonction qui recherche une chaine de caractères dans une autre
Forum Programmation : >RESOLU<[C] fonction qui recherche une chaine de caractères dans une autre
Bonjour à tous !
J'aimerais savoir qu'elle fonction peut rechercher une chaine de caractères dans une autre mais en ignorant les majuscules/minuscules.
Par exemple, la recherche de "Manger des PommeS" dans "J'aime manGer DES pommes" devra être fructueuse.
Pourvez-vous me donner le nom d'une fonction comme celle-ci ?
PS : ne me proposez pas la fonction strstr(); car c'est celle que j'utilise et elle prend en compte les minuscule/majuscule.
PS² : une fonction qui ignore en plus les accents serait encore mieu ;-)
Quel compilateur ?
Pour les majuscules, tu peux tout transformer en majuscules et faire le strstr().
Pour les majuscules, tu as toupper() sur un caractère (local routine (je sais pas comment on dis en fr)) donc peut-être que ça marche pour les accents
Tu pourrais transformer en nombre comme sa tu n' aurais plus de probleme de majuscules ni d' accents.
Tu aura plus qu' a comparer des nombres.
| Citation :
|
Mon compilateur est GCC.
Et il n'y a pas de fonction qui font l'inverse de toupper ? (qui mettent en minuscule)
| Citation :
|
Je te suis pas là !
Je veux pas comparer mais rechercher des chaines de caractère et si je prends le code ASCII ou les octets de caractères : ils ne seront pas les mêmes.
| Citation : Et il n'y a pas de fonction qui font l'inverse de toupper ? (qui mettent en minuscule) |
tolower() ;-)
merci ! ;-)
Argh ! ça marche pas ! :-o
tolower(); ne touche pas au accent et toupper(); non plus !
Quelqu'un peux m'aider ?
PS : j'ai essayer :
Code :
|
Mais ça marche pas ! Le programme ne rentre pas dans la condition !
J'ai déjà eu ce type de problème.
Il doit bien exister une fonction...
Salut
tu irais plus vite a faire toi même la fonction qui remplace les accents en plus c'est pas super long a faire
Attention au 'é' !
il est codé différemment en ASCII et en latin-1 (ISO 8859-1).
Si tu es sous windows et que tu tapes 'é' dans ton éditeur, tu vas avoir l'encodage latin-1 ('é' == 0xE9).
Si ensuite, tu compares avec un 'é' qui serait tapé dans une console DOS (qui utilise l'encodage ASCII), tu auras 'é' == 0x82.
Donc quand tu compares, tu fais le test: 0xE9 == 0x82 qui est évidemment faut.
Et comment trouver une table de correspondance pour tous les autres accents ?
EDIT : Trouvé !
http://www.table-ascii.com/
Mais comment-faire mes comparaison maintenant ?
Et, dans le site, é = E9 C'est ça valeur en hexadécimal... Toi tu dit é = 0xE9 :-o
Je comprend plus rien ! :-D
Tu peux m'aider ?
0x en C ca indique que l'on utilise la notation hexadécimale pour un entier... Donc 0xE9 c'est E9, mais pour le C.
Comme pour un nombre précédé par 0 pour le mettre en octal
Merci ! ;-)
Je vais voir si ça marche !
EDIT :
Marche pas ! :-(
J'ai essayé de déclaré chaine[200] en char, unsigned char, et long; dans tous les cas ça marche pas.
je fait :
Code :
|
Vous pouvez m'aider ?
Et si tu affiches chaine[i] quand ce caractère est un 'é', ca donne quoi ? ( printf( "%x", chaine[i] ) )
| Citation :
|
Tu as mis le 0xE9 entre quote, il ne faut pas, 0xE9 c'est un nombre égal à 233.
Donc soit tu mets:
Code :
|
soit tu mets:
Code :
|
ça marche toujours pas !
L'erreur : "28 [Warning] comparison is always false due to limited range of data type "
est citée de la ligne 26 à 32
Voilà mon code en entier :
Code :
|
Et ça marche pas même quand je déclare chaine en unsigned char ou en long.
En trifouillant un peu j'ai trouvé que 0x82 = 'é' en ASCII et quand je met un printf ça passe (le caractère 'é' s'affiche) mais pas avec 0xE9 ça donne un 'Ú'.
Mais dans la condition ça foire toujours ! :-?
J'ai trouvé ! il suffit de mettre la valeur décimale du caractère ! é = -126 !
Mais j'ai un nouveau problème :
Ma fonction ne fonctionne pas quand la chaine de caractère provient d'un fichier, comment faire ?
PS : mon fichier est un txt écrit "à la main" avec notepad. (donc il contient des 'é' et pas des '...' et autres caractères bizares)
J'ai trouvée aussi ! lol
Il suffit là encore de prendre la valeur décimale mais celle-ci est differente des précèdentes.
(ça vient du codage du fichier je pense mais je suis pas un pro dans ce domaine)
Donc é = -23
Oui notepad étant sous windows, il encode les caractères en Latin-1 (comme le code source).
Il y a 656 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
