Recherche de sous chaine dans une chaine

Résolu/Fermé
mec o feminin - 16 juin 2011 à 16:32
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 17 juin 2011 à 10:34
Bonjour,

L'énoncé de l'exercice:
1-Construire la structure d'enregistrement composée de deux champs (ville et code) et la renseigner à l'aide des 10plus grandes villes de France.C'est une structure linéaire, un tableau de 10 éléments qui contient ces champs.
2-A l'aide de la même structure de données, effectuer le travail inverse, en considérant toutefois que l'utilisateur effectue une saisie sans erreur du nom de la ville. Attention à bien analyser le problème.
3-Traiter un cas particulier de recherche d'une chaine dans une autre. Par exemple, la recherche de <paris> doit permettre d'obtenir les villes suivantes:
"SEYSSINET PARISET", "DAMPARIS", "LE TOUQUET PARIS PLAGE", "PARIS L HOPlTAL", "VILLEPARISIS", "PARISOT", "CORMEILLES EN PARISIS", "FONTENAY EN PARISIS".

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <cctype>
#include <algorithm>

using namespace std;



// Différentes structures de transformation

struct my_tolower // transformation en miniscule
{
char operator() (char c) const
{
return std::tolower(static_cast<unsigned char> (c));
}
};


struct my_toupper // transformation en majuscule
{
char operator() (char c) const
{
return std::toupper(static_cast<unsigned char> (c));
}
};

// Définition des variables utiles à tout le programme


// Déclaration de la première structure

struct Vil
{
string ville;
int Code;
};

//Déclaration de la deuxième structure

struct Tri
{
string nouvelle_ville;
};



Vil Ville[10]; // nom de la structure des villes

Tri tri_ville[18];




// Fonction permettant l'affichage de la ville et du code postal correspondant a la ville entrez par l'utilisateur

void recherche(int a)
{
string nom;
int v;

cout<<"Entrez le nom de la ville" <<endl;
cin>> nom;


for(v = 0; v <= a; v++)
{

if(nom == Ville[v].ville)
{
cout<<"la ville est: "<<Ville[v].ville<<" le code correspondant est: "<<Ville[v].Code<<endl;
}

}
}


// Fonction permettant de faire le tri des différents Paris ki existe dans la nouvelle liste

void tri (int b)
{
string Nom;
int x;

cout<<"Entrez la ville: " <<endl;
cin>> Nom;

for(x = 0; x <= b; x++)
{
if(tri_ville[x].nouvelle_ville.find(Nom)!=std::string::npos)
{


cout<< "Les villes correspondantes a votre demande sont:" <<endl;
cout <<tri_ville[x].nouvelle_ville ;

}

}
}


int _tmain(int argc, _TCHAR* argv[])
{
string nom;
int code[10] = {75, 13, 69, 31, 06, 44, 67, 34, 33, 35};
int c;


// Construction de structure a deux champs avec la ville et le code

Ville[0].ville = "Paris";
Ville[0].Code = 75000;
Ville[1].ville = " Marseille";
Ville[1].Code = 13000;
Ville[2].ville = "Lyon";
Ville[2].Code = 69000;
Ville[3].ville = "Toulouse";
Ville[3].Code = 31000;
Ville[4].ville = "Nice";
Ville[4].Code = 6000;
Ville[5].ville = "Nantes";
Ville[5].Code = 44000;
Ville[6].ville = "Strasbourg";
Ville[6].Code = 67000;
Ville[7].ville = " Montpellier";
Ville[7].Code = 34000;
Ville[8].ville = "Bordeaux";
Ville[8].Code = 33000;
Ville[9].ville = "Rennes";
Ville[9].Code = 35000;

// Construction de structure pour effectuer le tri des villes en fonction des données de l'utilisateur


tri_ville[0].nouvelle_ville = "PARIS";
tri_ville[1].nouvelle_ville = "MARSEILLE";
tri_ville[2].nouvelle_ville = "LYON";
tri_ville[3].nouvelle_ville = "TOULOUSE";
tri_ville[4].nouvelle_ville = " NICE";
tri_ville[5].nouvelle_ville = "STRASBOURG";
tri_ville[6].nouvelle_ville = "NANTES";
tri_ville[7].nouvelle_ville = "MONTPELLIER";
tri_ville[8].nouvelle_ville = "BORDEAUX";
tri_ville[9].nouvelle_ville = "RENNES";
tri_ville[10].nouvelle_ville = "SEYSSINET PARISET";
tri_ville[11].nouvelle_ville = "DAMPARIS";
tri_ville[12].nouvelle_ville = "LE TOUQUET PARIS PLAGE";
tri_ville[13].nouvelle_ville = "PARIS L HOPITAL";
tri_ville[14].nouvelle_ville = "VILLEPARISIS";
tri_ville[15].nouvelle_ville = "PARISOT";
tri_ville[16].nouvelle_ville = "CORMEILLES EN PARISIS";
tri_ville[17].nouvelle_ville = "FONTENAY EN PARISIS";

//TEST de la transformation

std::string s("essai de test majuscule");

std::transform(s.begin(), s.end(), s.begin(), my_toupper());
std::cout << s <<endl;

// Saisie du code postal et affichage de la ville correspondante

cout<<"Saisissez votre code postal: "; cin>> c;
cout<<endl;


// Recherche de du code correspondant à celui entré par l'utilisateur

if (c == 75000)
{
cout << Ville[0].ville;
cout << endl;
}

if ( c == 13000)
{
cout << Ville[1].ville;
cout << endl;
}

if ( c == 69000)
{
cout << Ville[2].ville;
cout << endl;
}

if ( c == 31000)
{
cout << Ville[3].ville;
cout << endl;
}

if ( c == 06000)
{
cout << Ville[4].ville;
cout << endl;
}

if ( c== 44000)
{
cout << Ville[5].ville;
cout << endl;
}

if ( c == 67000)
{
cout << Ville[6].ville;
cout << endl;
}

if ( c == 34000)
{
cout << Ville[7].ville;
cout << endl;
}

if ( c == 33000)
{
cout << Ville[8].ville;
cout << endl;
}

if ( c == 35000)
{
cout << Ville[9].ville;
cout << endl;
}

// Appelle de la fonction pour la recherche et l'affichage de ville et du code postal
recherche(10);
cout << endl;


//Appelle de la fonction pour la recherche et l'affichage de la liste des villes correspondante à la saisie de l'utilisateur

tri(18);
cout << endl;


system("PAUSE");
return 0;
}
voila tout!!!!

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 16/06/2011 à 16:45
Tu aurais pu tout mettre dans le même post (cf. en c++)
Sans parler des balises de code que tu n'as évidemment pas mises...

Si je test et que je rentre PARIS comme nom de ville, ça marche... alors où est le problème ?
0
mec o feminin
16 juin 2011 à 23:27
Personne ne trouve de solution ou c'est quoi le problème???
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
16 juin 2011 à 23:41
c'est bien, tu as mis le code, mais il manque encore les entrées sorties que tu obtiens.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
16 juin 2011 à 23:41
Comme je l'ai mis y a pas de problème, moi je test et ça marche...
Réponds à nos questions et on t'aidera !
0
mec o feminin
17 juin 2011 à 01:22
Tu entends quoi par entrée et sortie?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
17 juin 2011 à 08:44
ce que tu tapes et ce qu'il affiche.
Si je demande ça, c'est suite à la demande de KX chez qui ton programme fonctionne.
éventuellement, donne nous la version de ton compilateur et ton OS.
0
mec o feminin
17 juin 2011 à 09:04
Je suis sous Windows 7 et je compile avec Visual C++ Express donc dans un premier temps j'entre
// comme code postal 33000 il me ressort Bordeaux
// comme ville Nice il me ressort La ville est Nice et le code postal est 6000 (Le programme est sensible à la casse donc il faut forcement la majuscule au début de chaque nom de ville)
// entrez la ville je met Paris et la plus rien
il ne rentre pas dans le <if> parce que j'ai essayé de tester avant le <if> tout apparait normalement.
0