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 :

Codage ASCII - Chaîne de caractères.


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Codage ASCII - Chaîne de caractères.
    Bonjour,

    J'ai besoin d'aide pour faire un exercice de programmation en C++.
    Je vous donne le sujet : Ecrire un programme demandant de saisir un mot et qui affiche c mot dans la casse opposée (Minuscule et Majuscule et inversement). Utiliser un "Ou exclusif bit à bit", un tableau pour la chaîne de caractères et des boucles pour changer les caractères.

    SEULEMENT... Je sais pas comment faire pour incrémenter un tableau en tapant un mot sans appuyer sur entrée à chaque lettres...

    Cordialement,
    Nicolas.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Pour la saisie du mot tu utilise quelle instruction?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Avec un tableau Char non ?

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Oui, mais pour récupérer le mot entré par l'utilisateur?

    tu as déclaré ton tableau (je suppose)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //par exemple
    char mot[20];
    et tu souhaites:
    par Noob69
    incrémenter un tableau en tapant un mot sans appuyer sur entrée à chaque lettres...
    Mais question était donc qu'utilisais tu pour récupérer ton texte tapé?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ben... Avec une boucle For non ?

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    (Autre question car j'ai un TP complet à faire (J'ai commencé y'a qu'un mois la programmation...).
    L’instruction "atoi" permet de faire quoi ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Je t'invite à regarder le post intitulé: "cin : validation sur une variable"
    et a regarder tes cours, ainsi qu'a ne pas hésiter à faire des tests (quitte après à nous montrer ton code et tes erreurs).

    La fonction "atoi" permet de renvoyer la valeur d'un caractère entré en paramètre et non son code ASCII.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //exemple:
    char c='0';
    int a=atoi(c); //a contient 0
    int b=c;         //b contient la valeur de caractère 0 dans le code ASCII
    Bon courage.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 1
    Points
    1
    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
    int main ()
    {
    	{
    	int j;
    	char i;
    	char ch[25];
     
    	cout << "Veuillez taper un mot : " << endl;
    	cin >> ch[25];
     
    	for (j=0; j<i; j++)
    	{
    		if (ch[j]>= 'a' && ch[j]<='z') ch[j]-=32;
    		else if (ch[j]>= 'A' && ch[j]<= 'Z') ch[j]+=32;
    		cout << ch[j];
    	}

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    et ça ne marche pas?
    (il est plus agréable pour la lecture de mettre le code entre des balises de code, voir le # de la barre Message)

    Tu as compilé ton code?

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Oui...
    Mais il marche pas

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    quelques points:
    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
     
    //Qu'a tu inclus? ou écrit? avant..
    int main ()
    {
    { //< n'est elle pas de trop?
    int j;
    char i; //que doit contenir i?
    char ch[25];
     
    cout << "Veuillez taper un mot : " << endl; //endl? personnellement je ne le connais pas, il sert à rajouter un caractère de fin de chaine? '\0'?
    cin >> ch[25];
     
    for (j=0; j<i; j++)
    {
    if (ch[j]>= 'a' && ch[j]<='z') ch[j]-=32;
    else if (ch[j]>= 'A' && ch[j]<= 'Z') ch[j]+=32;
    cout << ch[j];
    }
    //ta fonction main return un entier selon ta déclaration au début (int main), il manque donc quelquechose...
    //+ fermer l'acolade SVP

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Je vais compléter ma réponse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cout << "Veuillez taper un mot : " << endl; //cout, cin ainsi que endl appartienne à l'espace de nom std l'as tu renseigné plus haut?
    Dans ce cas là tu diriges la chaine de carctère entrée par l'utilisateur vers la 25eme case de la chaine ch.
    Ce qui implique deux erreurs: la 25eme case n'existe pas, ch à 25 case (de 0 à 24), et la chaine rentré ne sera pas accessible en ch[0]
    Il vaudrait donc mieu que tu lui renseignes l'adresse de la chaine de caractère, soit:
    cin>> ch;

  13. #13
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Citation Envoyé par mebibyte Voir le message
    endl? personnellement je ne le connais pas, il sert à rajouter un caractère de fin de chaine? '\0'?
    Non, ça c'est « std::ends() ».
    END String.

    « std::endl() » (END Line) rajoute une marque de fin de ligne (normalement, « '\n' », pour Windows et Mac je ne suis pas sûr) et en plus vide le flux (flush).

    [edit]
    Avec g++ sous Windows, ça ajoute « "\r\n" ».
    Vraissemblablement, ça ajoute « '\r' » sous Mac.
    Pour les autres compilateurs, je ne sais pas.
    [/edit]

  14. #14
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Noob69 Voir le message
    Utiliser un [...] un tableau pour la chaîne de caractères
    Citation Envoyé par Noob69 Voir le message
    L’instruction "atoi" permet de faire quoi ?
    Dis nous tout de suite quelle école/formation il ne faut surtout pas faire pour apprendre le C++.

    Les chaînes de caractère en C++ : std::string.
    Conversion chaîne de caractère/ numérique : std::stringstream
    Les conversions majuscules/minuscules : toupper/tolower (cctype). Quoique ces fonctions ne savent pas gérer les accents (entre autres)

    Soit quelque chose comme ça :
    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
    #include <iostream>
    #include <string>
    #include <cctype>
    #include <algorithm>
    #include <iterator>
     
    int main()
    {
       std::string saisie;
       std::cout<<"Saisir un mot : \n";
       std::cin>>saisie;
       std::string resultat;
       std::transform(saisie.begin(),saisie.end(),std::back_inserter(resultat),std::toupper);
       std::cout<<saisie<<" : "<<resultat<<"\n";
       return 0;
    }
    Pour répondre à ta question de départ, à savoir comment faire en C++ sans appuyer sur entrée : F.A.Q. Comment faire une pause (attendre que l'utilisateur tape une touche) ?

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par mebibyte Voir le message
    quelques points:
    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
     
    //Qu'a tu inclus? ou écrit? avant..
    int main ()
    {
    { //< n'est elle pas de trop?
    int j;
    char i; //que doit contenir i?
    char ch[25];
     
    cout << "Veuillez taper un mot : " << endl; //endl? personnellement je ne le connais pas, il sert à rajouter un caractère de fin de chaine? '\0'?
    cin >> ch[25];
     
    for (j=0; j<i; j++)
    {
    if (ch[j]>= 'a' && ch[j]<='z') ch[j]-=32;
    else if (ch[j]>= 'A' && ch[j]<= 'Z') ch[j]+=32;
    cout << ch[j];
    }
    //ta fonction main return un entier selon ta déclaration au début (int main), il manque donc quelquechose...
    //+ fermer l'acolade SVP
    La valeur 32 peut sembler 'magique' et peut être remplacer par une constante définie au début : static char const shift = 'a' - 'A';
    A la place des comparaisons, tu peux utiliser isupper et islower de <cctype>

Discussions similaires

  1. [Pep8] Ordre ASCII des chaînes de caractères
    Par Nadine11 dans le forum Autres architectures
    Réponses: 3
    Dernier message: 25/04/2014, 22h51
  2. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  3. Réponses: 2
    Dernier message: 08/12/2008, 21h31
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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