IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

besoin d'aide sur les chaine de caractere


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 36
    Points
    36
    Par défaut besoin d'aide sur les chaine de caractere
    Bonjours;

    Voila je debute en programmation C++ et j'aurai besoin d'un petit coup de main

    J'utilise Dev C++

    j'ai trouvé un exercice sur le web sur les chaine de caractere qui m'a l'aire d'etre assez complet pour les comprendre, cependant, il n'y avait pas de lien pour le corriger et j'ai un peu de mal a quelque endroit

    merci de votre aide

    1) il faut indiquer qu'elle est la premiere par ordre alphabetique
    2)rechercher si le caractere existe et afficher sa position

    cependant, je ne peut pas utiliser les librairies string.h; strlen; strcmp;...

    Voici ce que j'ai deja fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <cstdlib> 
    #include <iostream> 
     
     
    using namespace std; 
     
    int main(int argc, char *argv[]) 
    { 
    char i,j,k, *phrase = new char [20], *phrase2 = new char [20], *phrase3 = new char [20]; 
    cout<<"entre une phrase: "; //on entre une premiere phrase 
    cin>>phrase; 
     
    cout<<"\n"<<"voisi les elements de la phrase: \n"; 
    for(i=0;phrase[i]!='\0'; i++) 
    { 
    cout<<"lettre: "<<phrase[i]<<"\n"; 
    } 
     
     
    cout<<"\n"<<"entrer une deuxieme phrase: "; //on entre une deuxieme phrase 
    cin>>phrase2; 
     
    if(*phrase2 == *phrase) //on compare les deux phrases 
    { 
    for(j=0;phrase[j]!='\0'; j++) 
    { 
    cout<<"lettre: "<<phrase[j]<<"\n"; //si les deux phrases sont identiques, on les affiches 
    } 
    } 
    else 
    { 
    cout<<"\n"<<"la premiere chaine par ordre alphabetique est la chaine: "<< <<endl; //numero 1 
    } 
     
    *phrase3 = *phrase; //on copie la 1er chaine dans la troisieme chaine 
    cout<<"\n"<<"affichage de la troisieme chaine: "<<*phrase3<<endl; //on affiche la premiere chaine 
     
    cout<<"\n"<<"saisir un caractere: "; //on saisie un nouveau caractere 
    cin>>k; 
     
    if(k == *phrase) 
    { 
    /* on recherche si le caractere est présent 
    dans la premiere chaine et on affiche sa premiere position*/ 
    } 
    else 
    { 
    cout<<"erreur \n"; //iln'y a pas le caractere dans la chaine 
    } 
     
    delete phrase; 
    delete phrase2; 
    delete phrase3; 
     
    system("PAUSE"); 
    return EXIT_SUCCESS; 
    }
    Configuration: Windows XP
    Internet Explorer 6.0

  2. #2
    Invité
    Invité(e)
    Par défaut
    Ouh ! là !!

    Pour gérer des chaînes en C++, il est fortement recommandé d'utiliser les std::string de la STL...

    Ajoute la ligne suivante dans ton code :
    ... et va vite voir la FAQ C++ !!

    cependant, je ne peut pas utiliser les librairies string.h; strlen; strcmp;...
    Je note que <string> n'en fait pas partie.

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Bonsoir, soit c'est un cours de C++ et alors si ton exercice porte sur les chaine de caractère il est très mal pensé, et je te conseil de regarder du côté des "string" ( <string> ) comme on te l'a indiqué. Soit c'est un exercice plus porté sur les pointeurs et la ... bon pourquoi pas

    Soit c'est un cours de C et dans ce cas, il y a un forum C juste à côté de celui la

    Enfin, dans ton post tu n'indique pas le problème de ton programme, il compile ? Il plante a l'éxécution ? Il se comporte d'une manière que tu n'avait pas prévu ? Soit un peu plus précis si tu veux qu'on puisse t'aider.
    Bonne chance.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 36
    Points
    36
    Par défaut complément d'info
    Merci à ceux qui m'on aidé, je suis désolé si je n'est pas été très clair.

    Voila, je recommence:

    - Mon programme ne plante pas
    - Il ne fait pas ce que je lui demande:

    au debut je doit rentré une phrase, puis je doit rentré une seconde phrase et testé si elle est identique a la premiere et affiché le résultat.
    Cette fonction ne marche pas car elle ne compare que la premiere lettre

    ensuite si elle ne sont pas identique, je doit indiqué quelle est la premiere par ordre alphabetique: pour moi s'est mission impossible

    et il s'agit a la fois d'un exo sur les pointeur et les chaine de caractere mais je ne peu utilisé les librairie string.h et autre str...

    et comme il n'y a pas le corriger de l'exercice sur le net, s'est la galere pour apprendre

    Merci d'avance

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    OK, tu débutes en C++.
    Cet exo, il est personnel? ou il rentre dans le cadre d'un cours de C++ archaique qui supose qu'une chaine de caractères doit se manipuler comme en C?

    * Si personnel, oublies les char* dans un premier temps, et apprend le C++
    * Si prof, <pfff>. => man strcmp ; on utilise pas delete sur new[], ...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    L'expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(*phrase2 == *phrase) //on compare les deux phrases
    ne compare absolument pas les deux phrases, elle compare les pointeurs sur les deux phrases pour voir s'ils sont identiques, or ils ne le sont forcément pas car issu de 2 allocations différentes.

    Pour comparer deux phrases, il faut le faire en vérifier si tous les caractéres qui la compose sont identiques en passant en revu chaque caractére de la 1ere phrase pour les comparer au caractères de même rang de la 2e phrase

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    ne compare absolument pas les deux phrases, elle compare les pointeurs sur les deux phrases
    Pas vraiment non, là ça compare le premier caractère de chaque phrase.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    Effectivement, les 1er caractères.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 36
    Points
    36
    Par défaut merci
    merci pour votre aide; mais comment faire alors pour comparer 2 phrases

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <iostream>
    #include <string>
     
    int main() {
       std::string phrase1, phrase2;
     
       std::cout << "1er phrase\n-> ";
       std::getline(std::cin, phrase1);
       std::cout << "2nd phrase\n-> ";
       std::getline(std::cin, phrase2);
     
       if (phrase1 == phrase2) {
           std::cout << "les deux phrases son identiques" << std::endl;
       } else {
           std::cout << "les deux phrases son différentes" << std::endl;
       }
       return 0;
    }
    Je sais que ton code initial était en C avec streams, mais ... c'est tellement plus simple d'avoir un truc correct en C++.

  11. #11
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par nico85
    merci pour votre aide; mais comment faire alors pour comparer 2 phrases
    Avec std::string, c'est facile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main()
    {
    	string phrase1 = "Il fait beau aujourd'hui";
    	string phrase2 = "Il fait beau aujourd'hui";
     
    	if (phrase1 == phrase2) {
    		cout << "phrase1 et phrase2 sont les mêmes" << endl;
    	}
    	else {
    		cout << "phrase1 est différente de phrase2" << endl;
    	}
     
    	return 0;
    }
    Si tu dois absolument le faire dans le style C (ce que je ne comprendrais pas dans un cours de C++) et que tu n'as pas le droit d'utiliser strcmp, tu n'as qu'à te construire ta propre fonction mon_strcmp():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <iostream>
     
    using namespace std;
     
    int mon_strcmp(char const *chaine1, char const *chaine2) 
    {
    	while ((*chaine1 != '\0') && (*chaine2 != '\0') && (*chaine1++ == *chaine2++)) 
    	{
    		continue; //Cette boucle ne fait rien
    	}
     
    	return *chaine1 - *chaine2;
    }
     
     
    int main()
    {
    	char phrase1[] = "Il fait beau aujourd'hui";
    	char phrase2[] = "Il fait beau aujourd'hui";
     
    	if (!mon_strcmp(phrase1, phrase2)) 
    	{
    		cout << "phrase1 et phrase2 sont les mêmes" << endl; 
    	}
    	else
    	{
    		cout << "phrase1 est différente de phrase2" << endl;
    	}
     
    	return 0;
    }
    Toutefois, à moins d'avoir des contraintes qui t'interdisent de le faire, utilise toujours std::string, c'est plus propre, plus facile à manipuler et les risques d'erreur sont bien moindres qu'avec les chaînes de caractères dans le style C.

    EDIT: désolé, luc Hermitte a posté avant moi


    Thierry

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 10h00
  2. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo