>RESOLU<[C] fonction qui recherche une chaine de caractères dans une autre
Dernière réponse : dans Programmation
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 ;-)
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 ;-)
Autres pages sur : resolu fonction recherche chaine caracteres
Lassé par la pub ? Créez un compte
Citation :
CRicky a écrit :
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
Mon compilateur est GCC.
Et il n'y a pas de fonction qui font l'inverse de toupper ? (qui mettent en minuscule)
Citation :
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.
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.
Argh ! ça marche pas ! :-o
tolower(); ne touche pas au accent et toupper(); non plus !
Quelqu'un peux m'aider ?
PS : j'ai essayer :
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...
tolower(); ne touche pas au accent et toupper(); non plus !
Quelqu'un peux m'aider ?
PS : j'ai essayer :
if(chaine[i] == 'é')
chaine[i] = 'e'
etc...
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...
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.
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 ?
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 ?
Citation :
aerocell a écrit :
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 :
if(chaine[i] == '0xE9')
chaine[i] = 'e';
Vous pouvez m'aider ?
Tu as mis le 0xE9 entre quote, il ne faut pas, 0xE9 c'est un nombre égal à 233.
Donc soit tu mets:
if(chaine[i] == 0xE9)
chaine[i] = 'e';
soit tu mets:
if(chaine[i] == 233)
chaine[i] = 'e';
ç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 :
Et ça marche pas même quand je déclare chaine en unsigned char ou en long.
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 :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char chaine[200] = {0};
long i = 0, longueurChaine = 0;
fgets(chaine, 200, stdin);
longueurChaine = strlen(chaine);
do
{
printf("%x\n", chaine[i]);
chaine[i] = tolower(chaine[i]);
printf("%c\n", chaine[i]);
if(chaine[i] == '\n')
chaine[i] = 0;
else if(chaine[i] == 0xE9 || chaine[i] == 'è' || chaine[i] == 'ê' || chaine[i] == 'ë')
chaine[i] = 'e';
else if (chaine[i] == 'à' || chaine[i] == 'â' ||chaine[i] == 'à' || chaine[i] == 'ä')
chaine[i] = 'a';
else if (chaine[i] == 'î' || chaine[i] == 'ï')
chaine[i] = 'i';
else if (chaine[i] == 'ô' || chaine[i] == 'ö')
chaine[i] = 'o';
i++;
}while(i <= longueurChaine);
printf(" chaine = \"%s\"\n", chaine);
system("PAUSE");
return 0;
}
Et ça marche pas même quand je déclare chaine en unsigned char ou en long.
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)
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)
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumExcel fonction traitant chaine de caracteres
- ForumSql recherche chaine de caractere
- ForumRecherche dans une chaine de caractere ksh
- ForumRecherche dans une chaine de caractere php
- ForumPhp recherche dans une chaine de caractere
- ForumVba recherche chaine de caractere
- ForumRecherche chaine de caractere en vb.net
- ForumVba recherche dans une chaine de caractere
- ForumRecherche chaine de caractere vba
- ForumPerl recherche dans une chaine de caractere
- Voir plus