C++: controler la taille d'un cin

Résolu
Teemsis -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je dois réaliser un programme qui stock la chaîne de caractère entrée par l'utilisateur dans un tableau de taille égale à celle de la chaîne entrée.

Une petite idée?

Merci d'avance.

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Par définition, un mot c'est déjà un tableau de caractères !!!

int main ()
{
	std::string s;
	
	std::cout << "mot : ";
	std::cin >> s;

	char* tab = (char*) s.c_str();

	for (unsigned i=0; i<s.size(); i++)
		std::cout << tab[i] << " ";
			
	return 0;
}
0
Teemsis
 
Mon problème c'était qu'au lieu de créer un string, je faisais un char*.
Donc si mon mot excèdait la taille de mon char* alors il y avait une erreur de segmentation (d'où la volonté de faire un char[] de taille égale à la chaîne entrée).

Ce qui me semble bizarre c'est que ton code sous entend que string gère automatiquement la taille de s.
Peux-tu confirmer?

Aucun risque de dépasser l'espace mémoire qui est alloué à s?


Si c'est le cas c'est extra, merci beaucoup du coup de main.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Oui, c'est alloué automatiquement, au départ ton string a une capacité qui lui est réservée et si tu la dépasses il augmente automatiquement cette capacité en réservant plus de mémoire.
Ta seule limite au niveau de la taille de la chaine de caractères c'est std::string::max_size()
Voir aussi : std::string::capacity() et std::string::reserve(size_t)
0
Teemsis
 
Okay autant pour moi, j'ai regardé et tu as raison c'est aussi simple que ça.

Vive les strings !

C'est idiot mais comme en C on utilise pas les strings donc je pensais qu'il fallait faire un algo un peu lourd en essayant de gérer chaque touche entrée par l'utilisateur.

Le C++ est vraiment puissant O_O !


Merci beaucoup de ton aide.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu ne peux pas utiliser de string en C pour la bonne raison que c'est une classe, donc de la programmation objet, d'où la différence entre C et C++
0