2010-05-23 4 views
6

Tener una serie de espacios en blanco:Cómo llenar una sección dentro de la secuencia de C++?

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

me gustaría caracteres de longitud de relleno en una posición.

En C se vería como

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

¿Cómo puedo lograr esto con la secuencia de C++, probé

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

pero esto parece truncat la cadena original. ¿Hay una manera fácil de C++ para hacer esto? Gracias.

+0

¿Hay alguna razón para asignar dinámicamente la cadena en su ejemplo? – GManNickG

+1

@GMan - No quiero que ellos como variable auto y no en el montón en el mal strdup() – stacker

Respuesta

9

Además de string::replace() puede utilizar std::fill:

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

Si intenta llenar más allá del final de la cadena, sin embargo, será ignorado.

1

con uno de sustituir (...) métodos (documentation) que puede hacer todo lo que necesita

7

En primer lugar, para declarar una cadena simple que no necesita punteros:

std::string str; 

para rellenar una cadena con el contenido de un determinado tamaño, puede utilizar el constructor corresonding:

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

a rellenar cadenas que puede u se el método de reemplazo:

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

Debe realizar comprobaciones convenientes. También puedes usar iteradores directamente.

más general para los contenedores (de cuerda es un contenedor de caracteres), también se puede utilizar el algoritmo de std :: llenar

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

manera compilador todavía se queja - alguna sugerencia? error: conversión no válida de 'char 'a' const char *' error: inicializando el argumento 3 de 'std :: basic_string <_CharT, _Traits, _Alloc> & std :: basic_string <_CharT, _Traits, _Alloc> :: sustituir (nombre de tipo _Alloc :: size_type, TypeName _Alloc :: size_type, const _CharT *) [con _CharT = char, _Traits = std :: char_traits , _Alloc = std :: asignador ]' – stacker

Cuestiones relacionadas