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 :

Calcul de la somme des valeurs Ascii d'une chaîne


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 109
    Points : 78
    Points
    78
    Par défaut Calcul de la somme des valeurs Ascii d'une chaîne
    Bonjour,

    Je souhaiterais, comme le titre l'indique, obtenir la somme de la valeur Ascii de chaque caractère d'une chaîne.
    Pour l'instant, je ne parviens qu'à afficher la valeur de chaque caractère à la suite :
    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>
     
    using namespace std;
     
    int main()
    {
        cout << "Entrez votre pseudo : " <<endl;
        string pseudo;
        getline(cin, pseudo);
     
        for(int compteur = 0; compteur<pseudo.size();++compteur)
     
        {
        char resultat = pseudo[compteur];
        cout << (int) resultat;
        }
     
    return 0;
    }
    Donc si mon pseudo est "toto".
    J'obtiens :
    Mon but est d'obtenir la somme de la valeur de chaque caractère entré, soit 454.
    116 + 111 + 116 + 111

    J'ai fait des recherches et ai utilisé "accumulate", mais la compilation de mon code ne s'effectue plus à cause de l'erreur obtenue.

    Je vous remercie de vos conseils.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par macakou99 Voir le message
    mais la compilation de mon code ne s'effectue plus à cause de l'erreur obtenue.
    L'erreur est..?

    std::accumulate fonctionne, sinon tu as déjà une boucle, qu'est-ce qui t'empêche de faire une addition ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Merci de m'avoir répondu.

    Malgré les efforts que je déploie, je bute sur le manque d'expérience et surtout de savoir, je suppose.
    Voici le code initial :

    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
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        cout << "Entrez votre pseudo : " <<endl;
        string pseudo;
        getline(cin, pseudo);
     
        for(int compteur = 0; compteur<pseudo.size();++compteur)
     
        {
        char resultat = pseudo[compteur];
        cout << (int) resultat;
     
        std::accumulate(resultat);
        cout << (int) resultat;
        }
     
    return 0;
    }
    Voici l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'accumulate' is not a member of 'std'
    J'ai bien compris que la syntaxe de "accumulate()" était :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     accumulate(start, end, initial_sum, func);
    Malheureusement, je ne parviens pas à l'appliquer spécifiquement à mon exemple, d'où ma demande d'éclairage.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    La doc indique que std::accumulate se trouve dans numeric.
    Elle fournit même des exemples d'utilisation.
    Ensuite si tu as compris la syntaxe, alors pourquoi celle que tu écris n'a rien à voir ?
    std::accumulate(myString.cbegin(), myString.cend(), 0); ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre actif Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Points : 219
    Points
    219
    Par défaut
    Bonjour,

    Je vois une autre erreur que celles pointées par Bousk ainsi qu'une solution alternative.

    tu utilises la spécification using namespace std; ; il est donc erratique d'appeler std::accumulate().

    Enfin, concernant l'alternative, pourquoi passer par std::accumulate() quand une "simple" addition est possible ?

    Je n'ai pas réalisé l'exercice et je ne sais pas trop où tu souhaites en venir mais le code ci-dessous ne fonctionne pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int var{0};
    for(auto & cpt:pseudo) {
    	var += static_cast<int>(cpt);
    	std::cout << var;
    }
    // valeur finale : 
    std::cout << '\n';
    std::cout << var;
    enfin, de manière à t'y retrouver un peu plus tard, je t'invite à préférer les noms complets (i.e: std::cout) plutôt que using namespace std;. Cela évitera par la suite de potentiels conflits, et permet surtout, in fine, de rendre ton code plus lisible.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par BioKore Voir le message
    Enfin, concernant l'alternative, pourquoi passer par std::accumulate() quand une "simple" addition est possible ?
    Ben, peut-être, tout simplement, parce que l'algorithme existe, et que son nom est bien plus explicite quant au résultat escompté que ne l'est la boucle équivalente

    Nous sommes bien d'accord que, en l'espèce, l'algorithme ne présente pas vraiment de problème, et que n'importe qui devrait être capable de l'implémenter pour ainsi dire "les yeux fermés".

    Mais il ne faut pas oublier qu'un code, c'est -- par nature -- quelque chose de presque "vivant": on a presque autant de raisons de modifier du code écrit "il y a des lustres" que de raisons d'écrire du tout nouveau code.

    Quand il s'agit de modifier du code, le simple fait d'être en mesure d'identifier les endroits potentiels où il faut intervenir permet souvent de gagner un temps précieux, qui pourra être utilisé à quelque chose "de plus utile" (comme... développer une nouvelle fonctionnalité).

    Or, si tu sais que tu dois intervenir sur l'une des parties du code qui "calcule une somme", une recherche (grep, par exemple) sur "accumulate" permet d'écarter bien plus de "faux positifs" qu'une recherche sur une boucle, qui mettra en évidence tous les endroits du code où ... tu parcoures les éléments des différentes collections.

    Si une recherche fournit un résultat "plus sélectif" qu'une autre, cela fait -- forcément -- moins d'endroits du code à vérifier, et une plus grande probabilité de trouver "rapidement" l'endroit du code qui t'intéresse.

    Cela implique une moins grande perte de temps à vérifier les endroits du code qui s'avèrent au final ne pas être celui que tu cherches. Moins de perte de temps == plus de temps pour "autre chose" par la suite
    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

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Bonjour et Pardon,

    Je viens juste de voir que BioKore et koala01 m'avaient répondu une semaine après Bousk.
    Je suis désolé de ne pas m'en être aperçu avant.

    Au bout de 48 heures, croyant ne pas pouvoir obtenir d'autres réponses à ce fil, j'ai continué à chercher et à lire des tutos.
    Et du coup, toutes ces lectures m'ont amené à revenir aux fondamentaux.
    Je suis donc repassé à l'apprentissage du C pour en comprendre bien les bases.

    Merci encore à Bousk, BioKore et koala01.
    J'ai lu avec beaucoup d'attention vos posts et conseils.

    Cordialement.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/05/2010, 00h36
  2. Réponses: 2
    Dernier message: 12/11/2009, 16h34
  3. Calcul de l'ensemble des sous-séquences d'une chaîne
    Par Bobez42 dans le forum Débuter
    Réponses: 5
    Dernier message: 11/06/2008, 19h02
  4. Calcul de la somme des valeurs d un champ
    Par JeanduB dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 01/04/2008, 09h20
  5. fonction sur la somme des valeurs issues d'une requete
    Par iam dans le forum Bases de données
    Réponses: 5
    Dernier message: 15/06/2006, 21h35

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