Rechercher : dans
Par :

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

Dernière réponse le 29 avr 2003 à 19:06:09 albert, le 29 avr 2003 à 10:10:38 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [c++][débutant]Char,string? » dans :
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Les templates en C++ VoirIntroduction Avantages Inconvénients Quand utiliser des templates ? Que dois-je mettre dans les .hpp et dans les .cpp ? Convention de notations Quelques templates célèbres STL BGL Premiers pas Spécifications de templates Template par...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

pouet, le 29 avr 2003 à 13:39:34

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

Répondre à pouet

2

batmat, le 29 avr 2003 à 15:08:49

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 ?

Répondre à batmat

3

albert, le 29 avr 2003 à 15:57:14

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

Répondre à albert

5

pouet, le 29 avr 2003 à 17:50:05

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)

Répondre à pouet

4

batmat, le 29 avr 2003 à 17:26:18

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 ?

Répondre à batmat

6

 albert, le 29 avr 2003 à 19:06:09

Je m'en vais donc tripoter tout ça,et je vous redonnerai de mes nouvelles.
Encore merci et à plus,Albert

Répondre à albert
Collection CommentÇaMarche.net