Conversion string et char, probleme

Signaler
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012
-
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
-
Bonjour,

soit le code suivant, qui convertit une chaine string en char:

#include <string>
#include
#include <cstring>
using namespace std;

int main (){

string combiJoueur1;
cout<<"entrer mot";
cin>>combiJoueur1;

string str =combiJoueur1;
size_t size = str.size() + 1;
char * buffer = new char[ 3];
strncpy( buffer, str.c_str(), 3);
cout << buffer << '\n';
delete [] buffer;


system ("pause");
return 0;
}

le seul probleme que je rencontre c'est que le programme me ressort bien le mot que j'ai rentré mais avec un "-" en plus...(si je rentre joue il me ressort joue-).

Quelqu'un pourrait-il m'aider ?

Merci à ceux qui me donneront un peu de leur temps, merci beaucoup !

7 réponses

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Heu, à quoi ça sert de faire cela ?

Sinon, pour ton problème, c'est tout simplement que tu essaies de faire rentrer un mot de 4 lettres dans un "char*" qui en possède 2 (2 + 1 pour le zéro terminal).

#include 
#include <cstring>

int main ()
{
  std::string combiJoueur1;

  std::cout << "Entrer mot: ";
  std::cin >> combiJoueur1;

  size_t size = combiJoueur1.size() + 1;
  char* buffer = new char[size];
  strncpy(buffer, combiJoueur1.c_str(), size);
  std::cout << buffer << std::endl;
  delete[] buffer;

  // Qu'est ce qui t'empêche de faire:
  std::cout << combiJoueur1.c_str() << std::endl;

  // Ou mieux encore:
  std::cout << combiJoueur1 << std::endl;

  return 0;
}
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

en faite je doit faire un programme comme le jeu du mastermind, je voulais donc convertir le string en char pour pouvoir aprés comparer chaque caractére avec la combinaison du joueur 1 par exemple..

Dans tes réponses, je ne comprends pas toujours le code que tu saisie car je ne suis que débutant et je n'utilise pas les mêmes méthodes, un peu de mal des fois à comprendre...desolé
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Pour accéder à un caractère d'un std::string, tu peux faire:

std::string s = "Coca";

// s[1] te permet d'accéder à 'o'
std::cout << s[1] << std::endl;


Inutile de convertir cela en char* !
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

ok, je vais essayer, merci beaucoup pour toute l'aide que tu m'apporte
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

saurais tu également comment empêcher le joueur de rentrée 2 fois la même lettre ?
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

je voudrais faire une fonction ou une procédure qui reprenne par exemple la variable string essaisJoueur qui contient la saisie de l'utilisateur mais le probleme c'est que je ne sais pas comment lui dire de reprendre la valeur de essaisJoueur
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
saurais tu également comment empêcher le joueur de rentrée 2 fois la même lettre ?


Tu ne peux pas l'en empêcher. A toi de vérifier que la chaîne obtenu ne contiennent pas de doublon.


je voudrais faire une fonction ou une procédure qui reprenne par exemple la variable string essaisJoueur qui contient la saisie de l'utilisateur mais le probleme c'est que je ne sais pas comment lui dire de reprendre la valeur de essaisJoueur


Oula. Je t'invite à revoir les bases. Essaie de voir sur des sites du genre "Le site du zéro". Il y a plein de tutoriaux faciles d'accès.

#include 

void fonction(const std::string& s)
{
  std::cout << s << std::endl;
}

int main()
{
  std::string essaieJoueur;

  std::cout << "Nom joueur: " << std::endl;
  std::cin >> essaieJoueur;
  fonction(essaieJoueur);

  return 0;
}