[c++][débutant]Char,string?

albert -  
 albert -
Bonjour à tous
Je lit au chapitre "c++,types de données" de CCM:
"il n'existe pas de type de données pour les chaînes de caracteres...
pour créer une chaîne on utilsera donc des tableaux."

puis je tombe sur un bout de code dans un livre(sérieux:CampusPress)
string prenom/*le prenom est stocké dans une variable de type string*/

En tant que débutant me voilà en peu perturbé.
Merci d'avance

5 réponses

pouet
 
tu as mal quote! il y a ecrit:
"Il n'existe pas de type de données pour les chaînes de caractères (suite de caractère) en langage C. Pour créer une chaîne de caractère on utilisera donc des tableaux contenant dans chacune de ses cases un caractère..."

effectivememnt je ne vois pas pourquoi l auteur parle du C dans un tutoriel C++, mais pour repondre a ta question. il n existe pas de type string, par contre il existe un objet std::string.
en C++, une chaine est stockee dans un tableau de caracteres (char), mais l objet string offre d autres possibilites.
bref pour l utiliser, appelle le constructeur
std::string(char *)
je te renvoie a la STL
0
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114
 
Pour info la stl signifie Standard Template Library, Les templates sont des modèles de classes...

Si tu commence le C++, reviens quand même aux templates un peu + tard Albert ;-)

@++
ps : le site de la STL : http://www.sgi.com/tech/stl/

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0
albert
 
Merci à vous deux
De toute façon tout ça est en anglais,c'est à dire en chinois pour moi.
j'en profite néanmoins pour poser une question tout aussi basique.

vu que les chaînes sont stockées dans un tableau de caracteres.
Si je veux faire un tableau avec:
DUPONT
DURAND
DUBOIS
Il faut déclarer un tableau multidimentionel.
char tableau [3][1]
Me trompe-je?
sinon merci encore et A plus,Albert
0
pouet
 
de rien,

par contre pour la doc, tu as interet a te mettre a l anglais.
et bien cela depend.
en fait c est un probleme d allocation de memoire.
tu vas devoir stocker des char. et ensuite tu vas stocker trois mots de 6 lettres donc:
char prenoms[3][6]; /* no comment please */
il s agit d une allocation statique, la memoire est reservee jusqu en fin de fonction.
par contre tu peux faire appel aux pointeurs:
char **prenomS;
char *prenom;
unsigned int i, j;

/* tu alloues de la memoire pour stocker trois chaines de caracteres */
prenomS = malloc(sizeof(char *) * 3);
for (i = 0; i < 3; i++)
{
/* tu alloues de la memoire pour le ieme prenom */
prenomS[i] = malloc(sizeof(char) * 6)); /* no comment please */
}

c est plus lourd a la declaration, mais c est mieux car tu peux liberer la memoire en cours de route.
voila.

cela dit ce sont des notions de base et tu devrais les lire toi meme (dans le K&R)
0
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114
 
Une lettre = 1 octet = 1 caractère...
donc c'est presque ça mais pas tout à fait.

Pour stocker tes trois noms tu as deux possibilités :
1) tu fais un truc pour toi (pas pro donc) et tu te fous des bugs possibles : tu fixes une taille maxi pour un nom. =>
-Tu as ici besoin de 8 caractères pour le plus grand nom.
-en C, une chaine est terminée par un '\0' donc un caractère de +pour ta chaine
- tu as 3 lignes

=> tu déclares char tontableau[8+1][3]

2) En dynamique : tu déclares char* tableau[3] et tu joues avec l'allocation dynamique (malloc) pour saisir la bonne taille de chaque nom.

Mon conseil : si tu es débutant, commence par 1) et seulement quand tu es sûr de maitriser, passe à 2).

3 (en fait) ) Le plus simple, mais tu ne sauras pas ce qui se passe, et c'est bien de ne pas connaître les bases...
tu écris #include <string> en haut de ton source

et dans le source tu peux déclarer string tachaine;

et écrire ensuite tachaine="monsieur";

Sache en fait que la classe string fait les malloc et realloc pour toi, c'est donc ni plus ni moins qu'une interface qui te simpilifie la vie avec les chaines de caractères...

@++

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
albert
 
je m'en vais donc tripoter tout ça,et je vous redonnerai de mes nouvelles.
Encore merci et à plus,Albert
0