Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Fonction strstr [ Windows / Autre ] (foufoudukb)

dimanche 13 mai 2007 à 20:07:28 | Fonction strstr

foufoudukb

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

dimanche 13 mai 2007 à 20:13:34 | Re : Fonction strstr

foufoudukb

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


dimanche 13 mai 2007 à 20:56:28 | Re : Fonction strstr

BruNews

Administrateur CodeS-SourceS
char *caractere;
C'est un pointeur et non un caractère.
Où pointe-t-il ???

ciao...
BruNews, MVP VC++

dimanche 13 mai 2007 à 21:00:45 | Re : Fonction strstr

SAKingdom

Membre Club
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++ (@++)


lundi 14 mai 2007 à 17:29:14 | Re : Fonction strstr

NitRic

pas de strstr() mais strchr()
il veut chercher un _Caractère_, pas une _Chaine_ ...

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

~(.:: NitRic ::.)~

lundi 14 mai 2007 à 20:04:31 | Re : Fonction strstr

SAKingdom

Membre Club
"Par ailleurs je dois trouver le nombre de fois que la chaine2 est dans la chaine1."

C++ (@++)


mardi 15 mai 2007 à 17:07:48 | Re : Fonction strstr

NitRic

Réponse acceptée !
j'avais loupé ce p'tit bout, désolé

~(.:: NitRic ::.)~



Cette discussion est classé dans : chaine, caractere, saisie, chaine2, chaine3


Répondre à ce message

Sujets en rapport avec ce message

Rechercher une chaine de caractere [ par Johjo ] Il n'y aurait pas une fonction qui me permette de retrouver une chaine de caractere dans une autreparce moi, je trouve rien du tout :(Si quelqu'un pou PB DE CHAINE DE CARACTERE [ par Orkblutt ] pkoi ceci me genere t'il une erreur a l'execution??#include void main(){ int o; o=2000; char* O=new char; itoa(o,O,10); char* ch="Fichier"; strcat(ch, PB DE CHAINE DE CARACTERE [ par Orkblutt ] pkoi ceci me genere t'il une erreur a l'execution??#include void main(){ int o; o=2000; char* O=new char; itoa(o,O,10); char* ch="Fichier"; strcat(ch, Convertir une chaine de caractere en Float [ par Johjo ] Bon, voilà, j'ai encore un probleme.Je dois maintenant convertir un chaine de caractere en float, et je ne trouve pas de fonctions, j'ai regardé dans Ajouter des slash [ par Mike ] SAlut,je recupere une chaine de caractere qui correspond au PATH d'un fichier, ensuite je souhaite l'utiliser comme variable, mais le probleme c que l Convertir chaine de caractere -> decimal [ par LordBob ] Salut a tous, en fait je voudrai juste savoir comment est-ce ke l'on pouver convertir une chaine de caractère (ex: salut) en decimal... Voila, m [VC++ 6.0] Extraire une chaine d'une CListBox [ par fredcpp ] Bonjour, j'essaye d'extraire une chaine de caractere ( ou plutot un item qui est une chaine de caractere ) d'une CListBox.Cette CList est bien remplie chaine de caractere [ par zincben ] Bonjour je comprend pas tres bien pourquoi ce code passe bien #include void main() { FILE *fp; char nom[10]; fp = fopen("barre.txt", "r+"); if (fp) { Exploitation de fichier en C ?!?!?! [ par GazGaz ] lu allalors voila le truc c'est que je voudrais aller chercher des infos dans un fichier qui est structuré de la meme maniere lignes apres lignes. Je comparation chaine de caractere [ par SfyLer ] prise de tête j'arrive pas a comparer de chaine de caractere:#include #include char main(void){ char login[6]; cout cin >> login; cout << "\n";<b


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,562 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.