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 :

Palindrome en c++


Sujet :

C++

  1. #1
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2019
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guin�e

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 9
    Par d�faut Palindrome en c++
    Bonjour � tous,

    J'ai un petit souci avec mon code c++, alors voici ce qui m'a �t� demand�:

    Ecrire un programme c++ qui permet de d�terminer si une cha�ne de caract�re entr�e par l'utilisateur est un palindrome ou pas. Et par la m�me occasion g�rer les impr�vus dans le cas ou un utilisateur entre des espaces.

    Alors moi j'ai pu g�rer le cas o� l'utilisateur entre des espaces, mais par la suite je n'arrive pas � d�terminer si le texte entr� est un palindrome. Voici mon code:

    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
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
       //Déclaration des variables
       int n(0), j(0), i;
       string chaine;
     
       //Saisie de la chaîne
       cout << "Entrer une chaine de caractere: ";
       getline(cin, chaine);
     
       //Détermination du nombre de caractères du texte saisi
       n = chaine.size();
     
       //Gestion des espaces entrées par l'utilisateur
       for(i=0; i < n; i++)
        if(chaine[i] != ' ')
            chaine[j++] = chaine[i];
        chaine[j++] = '\0';
     
     
     
       i = 0,j = n - 1;
       /*Boucle permettant de comparer un à un les caractères.
          Elle compare les caractères en commençant par les extrémités jusqu'au milieu.*/ 
       while(i < j && chaine[i] == chaine[j]){
        i++,j--;
       }
     
       if(i >= j)
        cout << chaine << " est un palindrome" << endl;
       else
        cout << chaine << " n'est pas un palindrome" << endl;
     
      return 0;
    }

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Bonjour,

    Le filtrage des espaces est effectu� � la fa�on du langage C. C'est risqu� en C++, ce que tu obtiens est un monstre. Tu ne peux pas changer la longueur de la cha�ne (�crire un '\0' est un undefined behavior) et tu souhaites enlever des caract�res.

    Si tu consid�res que la cha�ne � une longueur j � la fin du filtrage (au lieu de n), �a devrait fonctionner.

    En C++ on n'�crirait pas �a. On pourrait par exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    std::cout << "la chaine \"" << chaine;
    auto fin = std::remove( chaine.begin() , chaine.end() , ' ' );  // déplacer les espaces en fin
    chaine.erase( fin , chaine.end() );                             // ôter vraiment ces espaces
    if (chaine == std::string( chaine.rbegin() , chaine.rend() )) // la chaîne est égale à la chaîne lue en partant de la fin
        std::cout << "\" est un palindrome\n";
    else
        std::cout << "\" n'est pas un palindrome";

  3. #3
    Membre actif Avatar de abdennour bouaicha
    Homme Profil pro
    D�veloppeur Java
    Inscrit en
    Avril 2009
    Messages
    98
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activit� : D�veloppeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 98
    Par d�faut
    salut,
    voila un petit code pour savoir si un mot entr� est palindrome ou non , je l'ai gard� dans ma machine depuis que j��tais � l�universit�
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include <iostream>
     #include<conio.h>
    using namespace std;
     
    char* miroir(char*w);
    int equal(char*u,char*v);
    int palindrome(char*w);
    int longueur(char*str);
    main()
          {
          char mot[255];
         cout <<"entrer votre mot : ";
          gets(mot);
          if(palindrome(mot)==1)  cout <<mot<<" est un palindrome ";
          if(palindrome(mot)==0) cout <<mot<<" n'est pas un palindrome ";      
          cout <<"\n\n\n ---- fin du programme -----\n\n";
        getch();
          }
    char* miroir(char*w)
          {
          int i,ii;
          char str[255];
          for(i=0;i<longueur(w);i++)
            {
            str[i]=w[longueur(w)-1-i];
            ii=i;
            }
          str[ii+1]='\0'; //pr ne pas ecrire des symboles à la fin du mot!!!
          return str;
          }
    int equal(char*u,char*v)
        {
         int i,ii,a;
         for(i=0;u[i]!='\0';i++)
           {
            if(u[i]==v[i])
              {
              a=1;
              ii=i;
              continue;
              }
            else
              {
              a=0;
              break;
              }
           }
        if(a==0) return 0;
        if(a==1)
                {
                  if(v[ii+1]=='\0') return 1;
                  else return 0;
                }
        }
    int palindrome(char*w)
         {
         if(equal(w,miroir(w))==1) return 1;
         if(equal(w,miroir(w))==0) return 0;
         }   
    int longueur(char*str)
        {
             int i,j=0;                      
             for(i=0;str[i]!='\0';i++)
             {
             j++;
             }
         return j;
         }

  4. #4
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Mais, ca, c'est du pur C, ce n'est pas du C++...

    Or, tu es dans la section C++ du forum, ici... la section C, elle est de l'autre cot� de la rue
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par Dia390 Voir le message
    Bonjour � tous,

    J'ai un petit souci avec mon code c++,
    ...
    Salut,
    Le probl�me est que tu r�initialises j � l'ancienne taille, apr�s avoir supprim� les espaces (ligne 26).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
        //Gestion des espaces entrées par l'utilisateur
        for(i=0; i < n; i++)
            if(chaine[i] != ' ')
                chaine[j++] = chaine[i];
        for(int k=j; k < n; k++)
            chaine[k] = ' ';
     
        i = 0, j--;
        /*Boucle permettant de comparer un à un les caractères.
          Elle compare les caractères en commençant par les extrémités jusqu'au milieu.*/ 
    ...
    Et effectivement, ton code ressemble plus � du C qu'� du C++...

  6. #6
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Citation Envoy� par SimonDecoline Voir le message
    Et effectivement, ton code ressemble plus � du C qu'� du C++...
    Mais le traitement n'est pas sur place (<- lien wiki en anglais)


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    string w2 = word;
    reverse(w2.begin(), w2.end());
     
    (word == w2) ? cout << "The word is a palindrome\n" : cout << "The word is not a palindrome\n";

  7. #7
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par foetus Voir le message
    Mais le traitement n'est pas sur place (<- lien wiki en anglais)
    Je ne comprends pas ta remarque : l'algo de Dia390 est bien in-place. Perso, je n'aurais pas fait de traitement, juste :

    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
     
       auto iter0 = chaine.begin();
       auto iter1 = chaine.end();
       --iter1;
     
       while (iter0 < iter1) {
           while (iter0 != chaine.end() and *iter0 == ' ') ++iter0;
           while (iter1 != chaine.begin() and *iter1 == ' ') --iter1;
           if (*iter0 != *iter1) break;
           ++iter0;
           --iter1;
       }
     
       if (iter0 >= iter1 )
           cout << chaine << " est un palindrome" << endl;
       else
           cout << chaine << " n'est pas un palindrome" << endl;

  8. #8
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Citation Envoy� par SimonDecoline Voir le message
    Je ne comprends pas ta remarque
    Elle est simple : toi et @koala01 critique l'approche C du test du palindrome. Effectivement, pour tester un palindrome, il faut tester caract�re par caract�re.

    O� est la notion d'objet ici ?
    La r�ponse est simple : nulle part

    Parce que dans mon exemple, un objet string est utilis� : tu y copies le mot et tu l'inverses. Pour enfin comparer les 2. Tu perds le traitement sur-place parce que tu utilises une variable avec laquelle tu fais le gros du traitement.
    Dans ton exemple, tu forces l'objet en utilisant des it�rateurs. Donc 2 variables qui ne servent � rien juste pour dire "'JE VEUX DU C++ ET JE LE FERAI CO�TE QUE CO�TE"

    Par contre je ne remets pas en cause si c'est du C++ ou du C : dans du code objet, tu peux avoir � faire un peu de C (que tu planques dans une m�thode ) - et les cha�nes de caract�res en ont souvent besoin pour �tre manipul�es/ test�es.

  9. #9
    Invit�
    Invit�(e)
    Par d�faut
    Houla, mais DETENDS TOI MON AMI...

    Dire qu'un code est du C n'est pas une critique. Ici, c'est la section C++ donc on fait juste une remarque pour dire qu'en C++ moderne on ne verrait pas forc�ment ce style de code. C'est juste pour aider quoi. Et figure toi que j'ai commenc� par donner une correction tr�s proche du code initial; c'est donc peut-�tre qu'on est pas aussi sectaire que tu le dis...

    J'ai pas compris ton truc "C++ donc objet". Si tu veux dire que les it�rateurs sont des objets, figure-toi que string aussi. Tu voulais coder avec des char[] ?

    J'ai pas compris "les 2 it�rateurs sont 2 variables qui ne servent � rien". Si si, enl�ve-les et tu verras que le code marche beaucoup moins bien forc�ment... Et en quoi c'est plus compliqu� que d'utiliser deux indices i et j comme dans le code initial ?

    Perso, je ne suis pas un extr�miste du C++ mais l� oui string simplifie le code et oui les it�rateurs apportent un peu de s�ret� (par exemple avec les it�rateurs, tu peux comparer que l'un est devant l'autre et le compilateur v�rifie bien que tu compares des it�rateurs, alors qu'avec des indices, il v�rifie juste que ce sont des int mais si tu compares un indice avec une taille, le compilateur ne d�tectera pas d'erreur).
    Derni�re modification par LittleWhite ; 02/11/2019 � 11h24. Motif: Pas besoin de citer l'int�gralit� du message pr�c�dent

  10. #10
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Je ne devrais pas r�pondre

    Citation Envoy� par SimonDecoline Voir le message
    J'ai pas compris ton truc "C++ donc objet". Si tu veux dire que les it�rateurs sont des objets, figure-toi que string aussi. Tu voulais coder avec des char[] ?
    Arr�te de faire l'imb�cile : @Dia390 a fait du code en C++ avec des string, des cout et des cin.
    C'est du C++, donc c'est la bonne section.

    Or toi et @koala01 reprochais l'aspect C du traitement test palindrome parce que @Dia390 a utilis� les crochets comme avec les cha�nes de caract�res en C.

    Et donc
    Citation Envoy� par SimonDecoline Voir le message
    C++ moderne on ne verrait pas forc�ment ce style de code.
    Comment tu le fais avec l'interface de l'objet string ou autre ? C'est � dire avec la stl (reverse, find), avec les it�rateurs, ... comment tu fais pour coder le test un palindrome sans utiliser les crochets/ sans tester les caract�res directement/ sans parcourir ta cha�ne de caract�res ... parce que c'est tellement C.
    C'est pour la partie p�dagogique de ce fil de discussion

    Entre 4 r�ponses (toi et @koala01), vous nous fa�tes une Francis Blanche : "Je peux le faire"
    Et je signalais �galement que le test palindrome avec les crochets (en parcourant ta cha�ne et en testant caract�re par caract�re ) est un traitement sur-place : ce qui n'est pas n�gligeable - sans variables locales autres que les indices


    Citation Envoy� par SimonDecoline Voir le message
    J'ai pas compris "les 2 it�rateurs sont 2 variables qui ne servent � rien". Si si, enl�ve-les et tu verras que le code marche beaucoup moins bien forc�ment... Et en quoi c'est plus compliqu� que d'utiliser deux indices i et j comme dans le code initial ?
    Si, ils ne servent � rien parce que tu remplaces les indices entiers par des it�rateurs ... et les it�rateurs n'apportent rien de plus en s�curit�.


    Citation Envoy� par SimonDecoline Voir le message
    Perso, je ne suis pas un extr�miste du C++ mais l� oui string simplifie le code et oui les it�rateurs apportent un peu de s�ret� (par exemple avec les it�rateurs, tu peux comparer que l'un est devant l'autre et le compilateur v�rifie bien que tu compares des it�rateurs, alors qu'avec des indices, il v�rifie juste que ce sont des int mais si tu compares un indice avec une taille, le compilateur ne d�tectera pas d'erreur).
    Je te rappelle que dans le test palindrome tu as 2 indices, 1 qui part du d�but en sens croissant et l'autre qui part de la fin en sens d�croissant.
    Explique moi comment tu n'arrives pas � comparer que l'un est devant l'autre (avec des entiers) et � quel moment tu compares un indice avec une taille
    Je suis curieux ... et �videmment, hors tests pr�conditions - cha�ne vide ou d'1 caract�re, ...

    C'est s�r que dans un test palindrome , tu peux comparer les indices avec la taille ou avec l'�ge de la Reine d'Angleterre.

  11. #11
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par foetus Voir le message
    Or toi et @koala01 reprochais l'aspect C du traitement test palindrome parce que @Dia390 a utilis� les crochets comme avec les cha�nes de caract�res en C.
    Encore une fois, je ne reproche rien � personne, je dis juste qu'il y a une fa�on plus "C++ moderne" de faire.

    Citation Envoy� par foetus Voir le message
    Comment tu le fais avec l'interface de l'objet string ou autre ? C'est � dire avec la stl (reverse, find), avec les it�rateurs, ... comment tu fais pour coder le test un palindrome sans utiliser les crochets/ sans tester les caract�res directement/ sans parcourir ta cha�ne de caract�res ... parce que c'est tellement C.
    C'est pour la partie p�dagogique de ce fil de discussion
    C'est une blague ? J'ai donn� un code correspondant au message #7.

  12. #12
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par d�faut Huile sur le feu ?
    Bonjour,

    Sauf erreur, le C++ reste un sur-ensemble du C (le premier compilateur �tait en fait un compilateur C pr�c�d� d'un pr�-compilateur qui transformait en C les expressions C++).

    Aussi, la discussion porte plus sur la forme (C++ == objet) que sur le fond (un programme efficace et s�r compilable avec un compilateur C++).

    Dans le cas d'un exercice, si celui-ci a pour but d'appliquer les composantes haut niveau du C++, il me semble que le sujet devrait conduire � ce que la solution tire avantage des ajouts du C++. Je ne crois pas que ce soit le cas ici : l'exemple du code en pur C++ est bien moins efficace que la malheureuse boucle avec ses it�rateurs convergents.

    En r�sum�, ici c'est l'exercice qui est plus C que C++. Aussi la solution h�rite naturellement de cette coloration et se forcer � monter en abstraction en ferait un simple exercice de style sans autre justification.

    Salutations

  13. #13
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Citation Envoy� par SimonDecoline Voir le message
    C'est une blague ? J'ai donn� un code correspondant au message #7.
    Ah ouais, mais quel code ! QUEL CODE !

    � ce niveau de comp�tence, la puissance du C++ est � son climax. On voit clairement la diff�rence entre du code en C et du code en C++.
    Et comme tu l'as dit C'EST CA DU C++ MODERNE : au moins 1 ligne de plus pour les variables, des d�r�f�rencements au lieu de la syntaxe crochet ... ce sont de r�els avantages du C++

    Et comme tu le dis "tu peux comparer que l'un [it�rateur] est devant l'autre". Parce qu'effectivement, avec les entiers du C tu ne peux pas le faire
    Et surtout "des indices, il v�rifie juste que ce sont des int mais si tu compares un indice avec une taille, le compilateur ne d�tectera pas d'erreur" : si le compilateur C++ comprend ce que tu veux coder et le corriger c'est du pur g�nie.

    Ton code devrait �tre imprim� et �tre encadr� au mur. J'ai envie de me lever de ma chaise et d'applaudir des 3 mains : le C++ c'est oufissime.
    Et cette notion moderne. Ce n'est pas du C++ mais du C++ moderne : les it�rateurs, sont apparus avec la norme C++98 et �a c'est moderne. Le langage C �a ce n'est pas moderne : le parcours d'1 cha�ne de caract�res caract�re par caract�re cela sent la naphtaline. Parce que les it�rateurs cela change tout pour les cha�ne de caract�res ... c'est totalement diff�rent.

    Mais maintenant je comprends la remarque de @koala01 @Dia390 tu fais perdre du temps aux experts �minents C++ qui font du C++ et que le langage C c'est de l'autre cot� de la rue

    C++/ 20, code de g�nie / 20 mais surtout condescendance / l'infini


    Citation Envoy� par Guesset Voir le message
    il me semble que le sujet devrait conduire � ce que la solution tire avantage des ajouts du C++.
    C'est n'est pas vrai regarde le code de @Dia390 c'est du C++. Mais le test du palindrome est avant tout un algo it�ratif que l'on peut coder avec des objets en C++ (voir mon message #6 qui est plus C++ que le code de @SimonDecoline)
    Mais c'est le reste du code qui tire parti du C++, et non pas l'algo en lui m�me. Parce que l'objet string est plus simple � manipuler que les cha�nes de caract�res en C (... �videment si on reste sur de l'ASCII )

  14. #14
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Et, les gars!!!

    Moi je parlais du code d'abdenour qui nous a gentiment pr�sent� un code tel qu'il l'a trouv� sur l'ordinateur de sa faq. Et, concernant ce code, je me suis content� de signaler que c'est du pur C et qu'il faut choisir le langage avec lequel on s'adresse � l'ordinateur :
    Soit on d�cide de parler en C, mais alors, on s'est tromp� de section, soit on d�cide de parler en C++, mais, dans ce cas l�, un code C n'a pas d'avantage sa place dans cette section que le latin de jules c�sar � l'heure actuelle pour demander son chemin sur les champs �lys�s.

    Cela fait vingt-cinq ans que le C++ est devenu un langage tout � fait diff�rent du C, et dont la seule erreur a �t� de vouloir maintenir un semblant de compatibilit� avec le C.

    A cause de cette malencontreuse erreur, cela fait vingt-cinq ans que des gens viennent utiliser ce qui semble �tre de bonnes pratiques en C dans un langage pour lequel les pratiques en questions sont n�fastes, pour ne pas dire nocives.

    Et cela fait vingt-cinq ans que l'on dispose de moyen fiables et efficace de g�rer les cha�nes de caract�res de mani�re bien plus simple que ce que nous impose le C.

    Inverser une chaine de caract�res, cela peut se faire en une suele instrution, simplement en construisant une nouvelle chaine:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    //soit la chaine qu'il faut inverser
    std::string origine; // on demandera à l'utilisateur de l'introduire par lui-même
    std::string inverse{origine.rbegin(), origine.rend()};
    A partir de l�, un simple test if(inverse == origine) suffira � nous donner la r�ponse qui nous int�resse.

    Pourquoi faudrait-il se casser le cul � faire quelque chose de plus compliqu�, en commen�ant � cr�er trois fonctions, dont une qui risque de poser un probl�me si la chaine d'origine d�passe les 255 caract�res
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  15. #15
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    Pourquoi faudrait-il se casser le cul � faire quelque chose de plus compliqu�, en commen�ant � cr�er trois fonctions, dont une qui risque de poser un probl�me si la chaine d'origine d�passe les 255 caract�res
    Effectivement le code en 3 parties de @abdennour bouaicha est excessif.

    Donc pour toi faire une boucle avec 2 indices qui convergent c'est compliqu� ... parce que je te signale que tu es hors sujet parce que @Dia390 voulait g�rer en m�me temps les espaces (qui par ailleurs @Dia390 ne nous dit pas en quoi les espaces le g�nent ? )
    Mais je reviens � ma question de mon message #6 (au passage ton code ne fait pas plus que le mien post� 1 journ�e plus t�t) : le traitement sur-place n'est pas important pour toi ?

  16. #16
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Je crois que je ne vais pas commencer � m'inqui�ter directement de savoir si le traitement sur-place est important ou pas.

    Je crois que le principal est d'obtenir quelque chose qui fonctionne, avant de s'inqui�ter des circonstances qui pourraient nous imposer de faire fonctionner la chose plus vite ou en utilisant moins de m�moire.

    Je crois que, comme Dia390 n'a pas signal� qu'il �tait dans une situation dans laquelle il devait �tre attentif au temps de traitement ou � l'utilisation de m�moire, la solution la plus simple reste de tr�s loin la meilleure.

    Je crois que, si Dia390 avait voulu placer ce code sur un micro-contr�leur limit� en terme de vitesse d'ex�cution ou en terme de m�moire, il nous l'aurait sans doute fait savoir.

    Je crois enfin que
    premature optimisation is root for all evil
    et que le code le plus simple place d�j� des limites particuli�rement difficiles � atteindre y compris sur les ordinateur les plus vieux qui sont encore en fonctionnement aujourd'hui.

    Attention, je ne dis pas que je rejette l'id�e d'optimiser les choses si le besoin s'en fait sentir! Je dis juste que je pr�f�res attendre d'avoir un indice franc que le besoin en question est bien r�el

    Pour le reste, je crois que tu sais tr�s bien que je suis l'un des principaux d�fenseurs d'une utilisation moderne du langage, que je n'ai rien contre le C, mais que je pr�f�re malgr� tout qu'on �vite de l'utiliser dans un projet C++, tout comme je pr�f�re que l'on �vite d'utiliser le C dans un code java: ce sont des langages diff�rents, qu'on les utilise dans des projets diff�rents, quitte � fournir une passerelle qui puisse permettre la transition de l'un � l'autre en cas de besoin ;

    Si j'ai d�cid� d'�crire mon intervention pr�c�dente, c'�tait juste pour faire savoir que ma toute premi�re intervention portait sur le message de abdennour bouaicha, parce que, selon toi,
    Or toi et @koala01 reprochais l'aspect C du traitement test palindrome parce que @Dia390 a utilis� les crochets comme avec les cha�nes de caract�res en C.
    et que je voulais �tre bien clair : je ne reproche pas quoi que ce soit � Dia390.

    Et sinon, ben, je constate qu'il y a "un probl�me" entre toi et SimonDecoline dans cette discussion, mais, pour ma part, je ne le comprends absolument pas (et je ne suis m�me pas sur de vouloir le comprendre). Et je constate que tu essayes de m'entra�ner dans ce conflit alors que je n'ai aucune envie d'y prendre part.

    Si je t'ai choqu� en disant que la section C �tait "de l'autre cot� de la rue", je t'en fais mes excuses. Peut-�tre souhaiterais tu que je modifie mon message d'origine pour �tre plus pr�cis (concernant la personne � qui j'adresse la remarque), et que j'en profite pour dire que "la section C, c'est la section d'� cot�"
    Donc pour toi faire une boucle avec 2 indices qui convergent c'est compliqu� ...
    C'est en tout cas beaucoup plus compliqu� que de n'avoir aucune boucle et de laisser le langage tout faire pour nous

    De mani�re g�n�rale, je crois que si on a un code qui fait le taf en deux instructions lisibles et compr�hensibles (comprends : sans que le lecteur ne doive commencer � se creuser la t�te pour comprendre tout ce que les instrutions implique), et un autre code qui obtient exactement le m�me r�sultat en trois instructions (tout aussi lisibles et compr�hensibles, cela va de soi), le code qui n�cessite les trois instructions est, effectivement, "plus compliqu�" (peut-�tre pr�f�rerais tu que j'utilise le terme "plus complexe" ) que le code qui n'en n�cessite que deux

    parce que je te signale que tu es hors sujet parce que @Dia390 voulait g�rer en m�me temps les espaces
    Ah, je crois comprendre le probl�me : pour toi, "Et par la m�me occasion g�rer les impr�vus dans le cas ou un utilisateur entre des espaces." implique que cette gestion devrait �tre effectu�e en m�me temps que la v�rification pour savoir si on a affaire � un palindrome.

    De mon point de vue, cela voulait tout juste dire qu'il fallait s'assurer de supprimer les espaces avant de faire la v�rification, chose qui aurait tr�s bien pu prendre place entre la ligne 3 et la ligne 4 du code que j'ai pr�sent�
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  17. #17
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    Inverser une chaine de caract�res, cela peut se faire en une suele instrution, simplement en construisant une nouvelle chaine:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    //soit la chaine qu'il faut inverser
    std::string origine; // on demandera à l'utilisateur de l'introduire par lui-même
    std::string inverse{origine.rbegin(), origine.rend()};
    A partir de l�, un simple test if(inverse == origine) suffira � nous donner la r�ponse qui nous int�resse.
    La question initiale demande d'ignorer les espaces donc cette solution n'est pas suffisante. De plus, si Dia390 est parti sur un algo sans copie, ce n'est peut-�tre pas pour se compliquer la vie mais peut-�tre pour pouvoir traiter des grosses entr�es plus efficacement.

    @foetus : Si tu n'es pas capable de comprendre qu'un it�rateur apporte une s�mantique diff�rente d'un int, lis les docs et fais des tests. Pour le reste, �a rel�ve de la psychiatrie, il faut juste que tu consultes un sp�cialiste.

  18. #18
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par SimonDecoline Voir le message
    La question initiale demande d'ignorer les espaces donc cette solution n'est pas suffisante.
    Elle n'est peut-�tre pas compl�te, je te l'accorde, car il manque sans doute effectivement quelque chose entre les lignes 3 et 4 pour supprimer les espaces, mais elle est amplement suffisante pour d�terminer si on a affaire � un palindrome ou non
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  19. #19
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2019
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guin�e

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 9
    Par d�faut
    auto fin c'est une variable ou quoi ? si oui il est de quel type ?

  20. #20
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Effectivement , auto c'est un concept apparu avec le C++ moderne (C++11, C++14, C++17, C++19) et le principe c'est de manipuler des objets/ variables sans conna�tre leur type : c'est un type automatique.
    C'est le compilateur qui le g�re pour toi.

    Le pourquoi de la chose, c'est de pouvoir faire du code avec lequel on peut changer les types facilement ... et qu'en d�finitive n'est pas important : on r�cup�re "1 variable de type auto" que l'on passe en param�tre ou qu'on donne � un service.

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. Palindrome
    Par zouyou dans le forum C++
    R�ponses: 18
    Dernier message: 05/05/2010, 01h28
  2. Palindrome
    Par casafa dans le forum Algorithmes et structures de donn�es
    R�ponses: 11
    Dernier message: 02/12/2005, 07h33
  3. Tester si un mot est palindrome
    Par imeys dans le forum Langage
    R�ponses: 2
    Dernier message: 22/11/2005, 15h03
  4. palindrome
    Par devd�buto dans le forum C
    R�ponses: 6
    Dernier message: 17/11/2005, 22h53
  5. [Debutant] Programme de test de palindrome
    Par lala_ dans le forum Assembleur
    R�ponses: 5
    Dernier message: 13/02/2005, 15h48

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