compter chaine1 dans chaine2 - C - Programmation
Marsh Posté le 17-04-2006 à 13:41:19
ReplyMarsh Posté le 17-04-2006 à 13:45:53
skelter a écrit : non, mais tu peux boucler avec strstr |
c'est quoi ca
skelter a écrit : non, mais tu peux boucler avec strstr |
Marsh Posté le 17-04-2006 à 13:54:10
c'est une fonction
http://www.linux-kheops.com/doc/ma [...] str.3.html
Marsh Posté le 17-04-2006 à 14:04:08
merci mec .
mais esqu'on peut construire cette fonction ""(qui compte combien de fois une chaine ch2 apparais dans une autre chaine ch1 )"" par nous meme ?
Marsh Posté le 17-04-2006 à 14:14:13
je ve construire en c la fonction : strcomptstr( const char *ch1 , const char *ch2 );
qui compte combien de fois une chaine ch2 apparais dans une autre chaine ch1.
pourai ' je avoire un peut d'aide SVP.
merci
Marsh Posté le 17-04-2006 à 14:14:53
big_dadi_fat a écrit : merci mec . |
oui, en te servant de strstr
Marsh Posté le 17-04-2006 à 14:22:42
skelter a écrit : oui, en te servant de strstr |
mais strstr c'est une fonction predefinie qui compte combien de fois une chaine ch2 apparais dans une autre chaine ch1 . mois je ve la construire (strstr).
Marsh Posté le 17-04-2006 à 14:28:21
big_dadi_fat a écrit : mais strstr c'est une fonction predefinie qui compte combien de fois une chaine ch2 apparais dans une autre chaine ch1 . mois je ve la construire (strstr). |
Extrait de man strstr ...
SYNOPSIS |
Donc tu peux utiliser la fonction strstr() pour compter le nombre d'apparitions d'une chaîne dans une autre mais pas directement. Il faut voir cette fonction comme un outil que tu vas devoir utiliser plusieurs fois (N+1 pour être précis ).
Marsh Posté le 17-04-2006 à 14:43:58
ahhh OUI.
merci pour ton aide . je vais essayer.
et si j'ai des dificulter , vous m'aidiez ?
merci et a+
Marsh Posté le 17-04-2006 à 14:45:03
big_dadi_fat a écrit : mais strstr c'est une fonction predefinie qui compte combien de fois une chaine ch2 apparais dans une autre chaine ch1 . mois je ve la construire (strstr). |
Non. Tu as lu la doc ? Elle retourne l'adresse de la première occurence ou NULL si elle est absente.
Elle ne compte rien du tout. Si tu veux compter, à toi de boucler comme il faut...
Maintenant, si tu veux construire strstr(), c'est autre chose.
Essaye de clarifier ta demande, parce que là, c'est pas clair.
Marsh Posté le 17-04-2006 à 14:53:04
Emmanuel Delahaye a écrit : Non. Tu as lu la doc ? Elle retourne l'adresse de la première occurence ou NULL si elle est absente. |
non non : c'est moois qui n'a pas comprit au début , mnt c'est bon , je ve construire ma fonction (qui compt combien de fois ch2 et repeter dans ch1) à l'aide de strstr . merci.
encore une petit question : esqu'il faut absolument utiliser strstr pour construire ma fonction .
encor merci
Marsh Posté le 17-04-2006 à 15:01:22
big_dadi_fat a écrit : encore une petit question : esqu'il faut absolument utiliser strstr pour construire ma fonction . |
C'est la démarche logique dans l'industrie : on utilise ce qui existe avant de réinventer la roue. Maintenant, dans une démarche pédagogique, on peut certainement s'en passer et faire autrement.
Tout dépend du contexte.
Marsh Posté le 17-04-2006 à 15:03:59
Emmanuel Delahaye a écrit : C'est la démarche logique dans l'industrie : on utilise ce qui existe avant de réinventer la roue. Maintenant, dans une démarche pédagogique, on peut certainement s'en passer et faire autrement. |
OK merci.
si j'ai encore des prob , je vous poserai des question , OK ?
A+
Marsh Posté le 19-04-2006 à 15:57:55
resalut:
j'ai resolu se problème , sans utiliser la fonction strstr .
voici le code :
Code :
|
mais mnt je cherche une autre version , en utilisant strstr , mais je n'arrive pas à commencer (je ne sais pas comment et oû l'utiliser) :
alors un coup de pouce sera la bien venu , , merci .
Marsh Posté le 19-04-2006 à 16:01:05
http://www.cplusplus.com/ref/cstring/strstr.html
Comment : en comptant le nombre de fois ou tu utilises strstr (donc ton nombre d'occurences)
Sinon avec strtok aussi ca peut marcher.
Marsh Posté le 19-04-2006 à 16:13:58
_darkalt3_ a écrit : |
mais strstr me mentre selement si cette sous chaine[u] apparait dans la grande chaine elle ne me donne pas la position de cette occurence pour que je puisse continuer la rechaire d'ocurence dans la grande chaine.[i] !
je ne vois pas donc comment on peut compter le nombre de fois ou strstr à été utiliser !!
Marsh Posté le 19-04-2006 à 16:20:11
big_dadi_fat a écrit : mais strstr me mentre selement si cette sous chaine[u] apparait dans la grande chaine elle ne me donne pas la position de cette occurence pour que je puisse continuer la rechaire d'ocurence dans la grande chaine.[i] ! |
Et la valeur retournée, c'est pour la déco ?
Si tu ne comprends pas les paramètres, pose des questions. Tu ne peux pas raisonner sainement sur des connaissances floues ou insuffisantes...
Marsh Posté le 19-04-2006 à 16:52:00
Emmanuel Delahaye a écrit : Et la valeur retournée, c'est pour la déco ? |
bon , recapitulent
selon ce code :
Code :
|
---> si la chaine qui à été saisie contien un ou plusieur "lol" alors:
j'ai comme resulta un nombre (n'importe quoi : 8660)
et la chaine qui à été saisi .
--->si la chaine ne contien pas "lol" alors
j'ai un 0
et un "(null)" .
alors
Citation : Et la valeur retournée, c'est pour la déco |
comment je peut l'utiliser donc ?
Marsh Posté le 19-04-2006 à 17:01:08
strstr renvoie un pointeur vers la première occurence de la sous-chaine cherchée (aiguille) dans la grosse chaîne (botte de foin). strstr renvoie NULL si aiguillle n'est pas présente dans botte de foin
donc :
Citation : |
Marsh Posté le 19-04-2006 à 17:03:21
big_dadi_fat a écrit :
|
La doc que tu refuses de lire
http://dpobel.free.fr/man/html/aff [...] an/strstr/
dit en substance :
Citation : C'est l'adresse du premier caractère de la chaine trouvée ou NULL si il ne l'a pas trouvée. |
(C'est exactement ce que t'a montré ta petite expérience, non ?)
Code :
|
Une fois que tu as compris la méthode, tu généralises avec une boucle, un compteur et un peu de cervelle. Eh oui, il faut reflechir un peu... Fait un petit dessin si ça t'aide...
#include <stdio.h> |
Marsh Posté le 20-04-2006 à 11:54:30
ouf.. enfin,
je crois que j'ai compris la tecnique:
--------------------------------------------------------------------------
si notre grande chaine ch est : "AAAhihBBBhihCCC" ; alors
en faisons :
Code :
|
p pointera sur la chaine "hihBBBhihCCC"
en faisons:
Code :
|
p pointeura sur "BBBhihCCC" ---> la 1er occurence
en reutilisant strstr comme suit:
Code :
|
p pointera sur : "hihCCC"
en faisons :
Code :
|
p pointera sur "CCC" --->la 2eme ocurence
enfin :
Code :
|
p pointra sur NULL ==> c'est fini.
-------------------------------------------------------------
[i]alors ? c'est ca ou non ? .[u]
--> je vais essayer de generaliser avec un while: ...
Marsh Posté le 20-04-2006 à 13:33:41
big_dadi_fat a écrit : ouf.. enfin, |
Oui.
Citation : --> je vais essayer de generaliser avec un while: ... |
Bien.
Marsh Posté le 22-04-2006 à 15:55:47
Code :
|
Marsh Posté le 22-04-2006 à 16:08:53
C'est ok pour strstr ,
mais en le comparant avec le 1er code (sans utilisation de strstr -voire si dessou-) , je vois un prtit cas particulier non traiter dans la vertion qui utilise strstr .
par exemple : si la grande chaine est "ototoAtoKotoJ" , et la soous chaine est "oto"
la version du strstr : me donne 2 occurance --> elle ne recompt pas le o utiliser 2 fois
mais la version si dessou (sans strstr) me donne 3 --> en effait elle compte toutte les ocurence sans exeption .
le code:
Code :
|
alors je praifaire cette mthd (sans strstr) .
et par l'ocasion je vous demande esque ce code peut encore être amelliorer ?
remerci
Marsh Posté le 22-04-2006 à 16:10:09
Ton code commenté et corrigé.
Code :
|
Marsh Posté le 22-04-2006 à 16:19:41
euuh , ok , mais je n'est pas encore etudier les fichier en c (je debutte en c) , et je ne comprend pas bien le code , mais merci pour tout .
et pour le code si desus (sans utiliser strstr ) ?
?
Marsh Posté le 22-04-2006 à 17:20:27
pour compter toutes les occurrences de ta sous chaîne, tu pourrais reprendre la version utilisant strstr(), mais en faisant avancer le pointeur d'une case seulement au lieu de n lorsque tu trouves une occurrence.
ça donne quelque chose du genre :
Code :
|
Marsh Posté le 22-04-2006 à 17:25:09
franceso a écrit : pour compter toutes les occurrences de ta sous chaîne, tu pourrais reprendre la version utilisant strstr(), mais en faisant avancer le pointeur d'une case seulement au lieu de n lorsque tu trouves une occurrence.
|
c'est vrais je n'avais pas vu !
merci franceso.
Marsh Posté le 17-04-2006 à 13:37:13
salut
je ve simplement savoire si en C , il y a une fonction (ou...?) qui compte combien de fois une chaine ch2 apparais dans une autre chaine ch1 ;
exemple:
si on a:
ch1: "ce forum est trop top"
ch2: "op"
la fonction doit retourner la valeur 2
merci