Fonction strstr [Résolu]

foufoudukb 4 Messages postés dimanche 13 mai 2007Date d'inscription 30 août 2009 Dernière intervention - 13 mai 2007 à 20:07 - Dernière réponse : NitRic 409 Messages postés mardi 1 mai 2001Date d'inscription 15 août 2011 Dernière intervention
- 15 mai 2007 à 17:07
Bonjour à tous. Alors voila j'ai un poblème avec la bibliothèque String.
Alors le problème porte plus précisement sur la fonction strstr pour rechercher les similitudes.

Le but du code est de creer 3 chaines de caractères  de 30 caracteres max(chaine1,chaine2,chaine3).
->chaine1 est deja initialisée
->chaine2 est donnée par l'utilisateur du programme ainsi que chaine3. (chaine2 doit contenir une phrase et chaine3 un caractere).

Je dois chercher dans la chaine2 le nombre de fois qu'apparait le caractère de la chaine3.
Par ailleurs je dois trouver le nombre de fois que la chaine2 est dans la chaine1. Mais je ne l'est pas encore fait.

Voici le code:

//Exercice 1 Chaînes de caractères

#include
<stdio.h>
#include
<conio.h>
#include
<string.h>
#include
<malloc.h>void

main()
{

//Declaration des variables
int longueur= 0,longueur2=0;
//Longueur des chaines 2 et 3
//int nbre_carac=0; //Nombre de caractère saisie(en chaine3) présent dans la chaine2

//Declaration des 3 chaînes de caractères
char *chaine1;
//chaine à initialisée
char *chaine2;
//chaine à saisir
char *chaine3;
//chaine vierge
char *caractere;
//Le caractere saisie
char *nbre_carac;

//Initialisation
chaine1=
"Salut";

//Saisie d'une chaîne de caractère
printf(
"Saisir une phrase\n");
chaine2=(
char *)malloc(30);
//On alloue un espace memoire de 30 en char
gets(chaine2);
//On saisie la chaine
printf(
"Chaine saisie:%s\n\n",chaine2);

//Saisie d'un caractère
printf(
"Taper un caractere\n");

//caractere=(char *)malloc(1);
scanf(
"%c",&caractere);
//Saisie du caractère
//gets(caractere);
printf(
"Caractere saisie:%c\n\n",caractere);

//Calcul de la longueur de la chaine2
longueur=strlen(chaine2);

C'est ici que je cherche le caractere de la chaine3 dans la chaine2
**************************

//Vérification de la présence du caractère saisie dans la chaine saisie.
nbre_carac =strstr(chaine2,caractere);

/*for(int i=0;chaine2[i]!=0;i++)
{
      if(strstr(chaine2,resultat)!=NULL)
      {
               nbre_carac++;
      }
}*/

**************************

//Copie dans la chaine3 de la chaine 1 et 2
chaine3=(
char *)malloc(30);
//allocation de mémoire
strcpy(chaine3,chaine2);
//On copie la chaine2 dans 3
strcat(chaine3,chaine1);
//On ajoute à la suite la chaine 1.

//Determination de la longueur de la nouvelle chaine
longueur2=strlen(chaine3);

//Résultats
printf(
"Chaine1:%s\nChaine2:%s\nChaine3:%s\nCaractere:%c\n\n",chaine1,chaine2,chaine3,caractere);
printf(
"Longueur de la chaine saisie(chaine2):%d\nNombre de presence du caractere saisie present dans la chaine saisie:%d\n",longueur,nbre_carac);
printf(
"Longueur de la nouvelle chaine(chaine3):%d",longueur2);

//On libere l'espace memoire
free(chaine2);
free(chaine3);

//free(caractere);getch();

}

Merci beaucoup ++

BarjoduKB
Afficher la suite 

Votre réponse

6 réponses

NitRic 409 Messages postés mardi 1 mai 2001Date d'inscription 15 août 2011 Dernière intervention - 15 mai 2007 à 17:07
+3
Utile
j'avais loupé ce p'tit bout, désolé

~(.:: NitRic ::.)~
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NitRic
foufoudukb 4 Messages postés dimanche 13 mai 2007Date d'inscription 30 août 2009 Dernière intervention - 13 mai 2007 à 20:13
0
Utile
Non désolé, la chaine3 est vierge. Au cours de l'exercice je copie dans la chaine3 la 1 et la 2. Le caractère à saisir est contenue dans caractere.

char *caractere;
//Le caractere saisie
 

Au tout début du code



Par contre je suis dsl il y a des lignes de code en commentaires, c'est juste que j'ai bidoullier pour trouver une solution.



Et aussi il faut peut être regarder la saisie du caractère.

//caractere=(char *)malloc(1);
scanf("%c",&caractere);
//Saisie du caractère
//gets(caractere);
printf("Caractere saisie:%c\n\n",caractere);

qui est juste au dessus de l'encadré en rouge dans le message precedent
Merci
Commenter la réponse de foufoudukb
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 mai 2007 à 20:56
0
Utile
char *caractere;
C'est un pointeur et non un caractère.
Où pointe-t-il ???

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 13 mai 2007 à 21:00
0
Utile
caractere ne doit pas être un pointeur mais un char tout simplement. Ensuite, rien de plus simple que de chercher combien de fois un caractère apparait dans une chaine:

char *c = chaine2;

while(*c) if(*c++ == caractere) ++nbre_carac;

Pour chercher le nombre de chaines présentes dans une autre chaine:

char *c = chaine1;int len strlen(chaine2), nbre_chaine 0;

while((c = strstr(c, chaine2))) {
    c+=len;
    ++nbre_chaine;
}

J'ai pas testé mais ça devrais être ça.

C++ (@++)
Commenter la réponse de SAKingdom
NitRic 409 Messages postés mardi 1 mai 2001Date d'inscription 15 août 2011 Dernière intervention - 14 mai 2007 à 17:29
0
Utile
pas de strstr() mais strchr()
il veut chercher un _Caractère_, pas une _Chaine_ ...

strstr( chaine, sous_chaine );
strchr( chaine, caractere );

~(.:: NitRic ::.)~
Commenter la réponse de NitRic
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 14 mai 2007 à 20:04
0
Utile
"Par ailleurs je dois trouver le nombre de fois que la chaine2 est dans la chaine1."

C++ (@++)
Commenter la réponse de SAKingdom

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.