2010-05-23 7 views
6

Avoir une chaîne de espaces blancs:Comment remplir une section dans une chaîne C++?

string *str = new string(); 
str->resize(width,' '); 

J'aimerais caractères de longueur de remplissage à une position.

en C, il ressemblerait

memset(&str[pos],'#', length); 

Comment puis-je parvenir avec C++ string, j'ai essayé

string& assign(const string& str, size_type index, size_type len); 

mais cela semble truncat la chaîne d'origine. Existe-t-il un moyen facile de faire cela en C++? Merci.

+0

Y a-t-il une raison pour allouer dynamiquement la chaîne dans votre exemple? – GManNickG

+1

@GMan - Je ne les veux pas en tant que variable auto plutôt que sur tas dans evil strdup() façon – stacker

Répondre

9

En plus de string::replace() vous pouvez utiliser std::fill:

std::fill(str->begin()+pos, str->begin()+pos+length, '#'); 
//or: 
std::fill_n(str->begin()+pos, length, '#'); 

Si vous essayez de remplir après la fin de la chaîne, il sera ignoré.

1

avec l'un des remplacer (...) méthodes (documentation) vous pouvez faire tout ce que vous avez besoin

7

Tout d'abord, de déclarer une chaîne simple que vous n'avez pas besoin pointeurs:

std::string str; 

pour remplir une chaîne avec le contenu d'une taille donnée, vous pouvez utiliser le constructeur corresonding:

std::string str(width, ' '); 

pour remplir dans les chaînes, vous pouvez u se la méthode de remplacement:

str.replace(pos, length, length , '#'); 

Vous devez effectuer des vérifications pratiques. Vous pouvez également utiliser directement les itérateurs.

Plus généralement pour les conteneurs (chaîne est un conteneur de caractères), vous pouvez également utiliser le std :: fill algorithme

std::fill(str.begin()+pos, str.begin()+pos+length, '#'); 
+0

compilateur se plaint encore - des suggestions? erreur: conversion non valide du 'char 'à 'const char *' erreur: Argument 3 de l'initialisation' std :: basic_string <_CharT, _Traits, _Alloc> & std :: basic_string <_CharT, _Traits, _Alloc> :: replace (typename _Alloc :: taille_type, typename _Alloc :: taille_type, const _CharT *) [avec _CharT = char, _Traits = std :: char_traits , _Alloc = std :: allocateur ] ' – stacker

Questions connexes