Convertir char en string (c++) ?

Hello

J’ai trouver un moyen de convertir un char en string seulment pas moyen de passer sa a une fonction via une référence.
le code suivant devrai servir a obtenir un char sans la référence mai bon sa ser a rien… vu que sa marche pas :blush:

	int size = sizeof(x) + 1;
	char v[size] = x;

le code aux complet
le fichier *.h

#ifndef DEF_X_MENU
#define DEF_X_MENU
#include <iostream> 
#include <limits>
#include <string>

class c_menu
{
	public:
		c_menu();
		void x_initialize();
		std::string char_to_string(const char &x);
};

#endif

le fichier *.cpp

#include <cstring>
#include "x_c_menu.h"


c_menu::c_menu() {}

std::string c_menu::char_to_string(const char &x)
 {
	int size = sizeof(x) + 1;
	char v[size] = x;
	std::string mystring = std::string(v);
	return mystring;
 }
 
 void c_menu::x_initialize() {
	std::string RetInfo;//vide ser uniquement a la réception de la fonction
	char &s[2]={"x"};
	RetInfo=char_to_string(s);
}

le fichier main.cpp

#include <iostream>
#include "x_c_menu.cpp"
int main()
{
	c_menu c_m;
	c_m.x_initialize();
}

bon sinon pour convertir un char en string c’est juste:

std::string mystring = std::string(char);

Seulement avec un passage a une fonction avec une référence sa foire. :unamused:
navrer si sa fait un peut sale m’enfin je débute dans le c++. :blush:

[quote=“panthere”]bon sinon pour convertir un char en string c’est juste:

std::string mystring = std::string(char);

Seulement avec un passage a une fonction avec une référence sa foire. :unamused:
navrer si sa fait un peut sale m’enfin je débute dans le c++. :blush:[/quote]
Je suis peut être un peu à l’ouest ce matin, mais je vois pas quand ça pose problème.
Tu peut donner un exemple ?

hello
ben a la place de char tu place une variable,celle qui est passer en référence (x)

std::string c_menu::char_to_string(const char &x){} std::string mystring = std::string(x);

et sa coince car std::string(x) veux un char et pas un & j’ai telmment tourner l’histoire que je me mélange les pinceaux.

Salut !

Je suis ultra débutant en c++, et j’ai pas compris grand chose à ton code, cependant ceci m’a interpellé :

Déjà pour initialiser un tableau de char en C :

char maprase[10] = {'j', 'e', ' ', 'n', 'e', ' ', 'v', 'e', 'u', 'x'}; char maphase[10] = "je ne veux";

Mais t’es pas obligé de préciser la taille :

char maprase[] = {'j', 'e', ' ', 'n', 'e', ' ', 'v', 'e', 'u', 'x'}; char maphase[] = "je ne veux";

Tu peux pas mélanger les deux (ou alors t’essayes de faire un tableau en deux dimensions en le mélangeant avec des références :smt120 ).

Et une référence doit pointer sur une autre variable du même type. Je veux dire que pour définir une référence vers un tableau de char, tu doit d’abord avoir un tableau de char qui a été défini “à l’ancienne”. Ensuite tu peux créer une référence vers ce tableau.

Notes que tu peux utiliser la fonction char_to_string avec un argument “normal”. Regardes attentivement le code de l’exemple fournit sur ccm.


Pour résumer ce que je voulait dire, dans ta fonction x_initialize, tu peux essayer de remplacer la ligne

par


EDIT: ces lignes servent carrément à rien :

int size = sizeof(x) + 1; char v[size] = x;

Pourquoi tu recopies le tableau de char que t’as passé en argument dans un autre tableau de char ?
Et je pense que le prototype de la fonction char_to_string n’est pas bon : l’argument est un tableau de char donc si t’as pas une étoile ou une paire de crochets poses toi des questions. Pour te guider je met un code approximatif (comme j’ai déjà dit je connaît pas grand chose en c++).

std::string c_menu::char_to_string(const char &x[]) /* ou bien */ std::string c_menu::char_to_string(const char * &x)


EDIT2:

Ceci fait ce que tu voulait ? Ou bien tu doit obligatoirement passer par l’utilisation d’une référence ?

void c_menu::x_initialize() { std::string RetInfo;//vide ser uniquement a la réception de la fonction char s[2]="x"; RetInfo=s; }

je pense que std::string c_menu::char_to_string(const char &x[]) devrai etre la cause ,il faut que je teste, merci pour le sprécisions sa aide :slightly_smiling:

en c++ on utilise des référence plutôt que les pointeur (enfin on les privilégies) car c est mieux.
Je te tien aux courant merci pour ta réponse :slightly_smiling:

Bon j’ai un peu de temps j’ai un peu revu ton code.
Pourquoi tu fait ça ?

[code]std::string c_menu::char_to_string(const char &x)
{
int size = sizeof(x) + 1;
char v[size] = x;
std::string mystring = std::string(v);
return mystring;
}

void c_menu::x_initialize() {
std::string RetInfo;//vide ser uniquement a la réception de la fonction
char &s[2]={“x”};
RetInfo=char_to_string(s);
}[/code]

Puisqu’au finale std::string permet de faire ça :

void c_menu::x_initialize() { std::string RetInfo ("x");//vide ser uniquement a la réception de la fonction }

Les possibilités sont déjà simpas je trouve :

int main (int argc, char ** argv){ using namespace std; string str("azerty"); cout << str << endl; str.clear(); str = "x"; cout << str << endl; return 0; } // end of main()

J’ai zappé un truc ? Parce que je vois pas la difficulté (ni la finalité).

Salut,
Lorsque tu écris ceci:

char &s[2]={"x"};

tu veux déclarer un tableau de caractères n’est-ce pas (parce que je ne pense pas qu’on puisse déclarer l’adresse comme étant du type char mais plutôt comme étant un pointeur sur une variable de type char.

[quote=“MisterFreez”]Bon j’ai un peu de temps j’ai un peu revu ton code.
Pourquoi tu fait ça ?

[code]std::string c_menu::char_to_string(const char &x)
{
int size = sizeof(x) + 1;
char v[size] = x;
std::string mystring = std::string(v);
return mystring;
}

void c_menu::x_initialize() {
std::string RetInfo;//vide ser uniquement a la réception de la fonction
char &s[2]={“x”};
RetInfo=char_to_string(s);
}[/code]

Puisqu’au finale std::string permet de faire ça :

void c_menu::x_initialize() { std::string RetInfo ("x");//vide ser uniquement a la réception de la fonction }

Les possibilités sont déjà simpas je trouve :

int main (int argc, char ** argv){ using namespace std; string str("azerty"); cout << str << endl; str.clear(); str = "x"; cout << str << endl; return 0; } // end of main()

J’ai zappé un truc ? Parce que je vois pas la difficulté (ni la finalité).[/quote]

Le truc, c’est de passer en parramettre les char pour avoir en retour les string.

Comme c est pas le bon type sa coince. je me suis fait une classe string ce qui manque pas de possibilité mai c’est plus du bidouliage par rapport a la lib enfin c est pour apprendre

Comme le C requière du type char j’ai remarquer que la lib on a pas quelque chose de simple pour la conversion char --> string et string --> char.
par simple j’entend:

new_string=char.conver_into_string(); new_char=string.conver_into_char();

le but étai donc d’obtenir et de faire une classe qui permet de faire cela.
la lib permet de le faire mai je trouve peux pratique.

Merci pour ton aide sa ma permis d’y voir plus claire :slightly_smiling:

[quote=“linux78”]Salut,
Lorsque tu écris ceci:

char &s[2]={"x"};

tu veux déclarer un tableau de caractères n’est-ce pas (parce que je ne pense pas qu’on puisse déclarer l’adresse comme étant du type char mais plutôt comme étant un pointeur sur une variable de type char.[/quote]

Oui le problème étai donc de cet ordre. sa ce complique du fait que c’est plus par pointeur mai par référence que je voulait utiliser seulment c est pas possible.

Il me faudrait utiliser un pointeur ce que je voulait éviter. A moins que sa soie possible autrement mai j’ai pas trouver comment faire la classe du nom: conversion avec 2 methode permettant de faire ceci:

new_string=char.conver_into_string();
new_char=string.conver_into_char();

Merci pour vos réponse :smt006

En quoi c'est plus pratique que :
[code]char c = 'z';
string str;
str = c;[/code]

Et pour ça :
[code]new_char=string.conver_into_char();[/code]
Il y a ça :
[code]c = str[0];[/code]
ou
[code]char *c;
c = str.c_str()[/code]

Je comprends toujours pas ce que tu cherche à faire. Tu essaie de re-faire des choses à ton goût pour voir comment ça marche ou tu cherche des solutions pour faire des conversions entre char et std::string ?

En quoi c’est plus pratique que :

char c = 'z'; string str; str = c;

Et pour ça :

Il y a ça :

ou

char *c; c = str.c_str()

Je comprends toujours pas ce que tu cherche à faire. Tu essaie de re-faire des choses à ton goût pour voir comment ça marche ou tu cherche des solutions pour faire des conversions entre char et std::string ?

Désolé j’arrive après la bataille,
mais pour stocker la chaîne “je ne veux” il faut 11 octet,
1 de plus pour le caractère de fin de chaîne ‘\0’ (cause de bien des SEGFAULT :wink: )

[quote=“MisterFreez”]
Je comprends toujours pas ce que tu cherche à faire. Tu essaie de re-faire des choses à ton goût pour voir comment ça marche ou tu cherche des solutions pour faire des conversions entre char et std::string ?[/quote]

les 2 :slightly_smiling:

je me fait une classe en complément de celle fourni par string. en gros c’est une sur-couche qui n’a pas son utilité mai sa me permait d’essayer héritages,surcharge,et polymorphisme (je doit dire que c est dure quand on arrive pas rester concentrer plus de 10 minute)
pour ce faire je recupere les char, qui peuve justement comme le dit BBT1 faire des dépassement de tableaux, et je fait les conversion en string mai avec des class, ce qui est plus lourd, mai plus stable a mon gout.
il me semble que cela est connu sous le nom de wrapper. Dans le but de faire un conteneur ré-utilisable

On ma trouver un lien ici for utile:http://www.cplusplus.com/
il me manque les API disponible pour accéder aux systeme par exemple pour faire un ls /dev (autre que par l’api system).
google c’est bien m’enfin si vous avez des lien a partager sur les api ou meme les man (aptitude ? )
Je suis preneur :smt006

Merci encore pour vos réponse

[H.S]
sinon j’ai eu un souci après le passage en sid ,geany et kate avais l’affichage qui déconne, j’ai du restaurer la sauvegarde :cry:
Bref je suis pas près de passer en sid, je vien de m’acheter des rack pour du stat II du coup je vai pouvoir me faire du multiboot et reprendre ma petite prog :astonished:
[/H.S]

Si tu manques d’inspiration pour t’exercer : projecteuler.net/

Sans forcément suivre à la lettre les énoncés, tu peux les modifier et faire des programmes intéractifs qui demandent à l’utilisateur de saisir les entrées au clavier.
Comme ça tu as quelque chose à te mettre sous la dent, plutôt que d’essayer de faire une surcouche de la bibliothèque standard :wink:


Pour le coup du ls /dev :

  • Il existe une fonction pour ouvrir un répertoire : opendir (ne fonctionne que sous unix). Ne pas oublier closedir.
  • Il existe une fonction pour lire une entrée d’un répertoire ouvert : readdir (ne fonctionne que sous unix)
  • Et seulement avec ces deux fonctions, tu doit te débrouiller pour afficher le contenu d’un répertoire.

Merci :slightly_smiling: je note comme accepter. je pense que je vai quand meme garder la sur couche a la lib-standar je sens que sa va me servir :stuck_out_tongue:

[quote=“panthere”]il me manque les API disponible pour accéder aux systeme par exemple pour faire un ls /dev (autre que par l’api system).
google c’est bien m’enfin si vous avez des lien a partager sur les api ou meme les man (aptitude ? )
Je suis preneur :smt006 [/quote]
On appelle ça les appel système et tu les trouve toutes documentés dans man / info si tu veut un bouquin la référence c’est « Programmation système en C sous linux ».