Pregunta

Una pregunta sencilla: Si tengo una cadena y quiero agregar a ella de cabeza y cola cuerdas (uno al principio y otro al final), ¿cuál sería la mejor manera de hacerlo? Algo como esto:

std::string tmpstr("some string here");
std::string head("head");
std::string tail("tail");
tmpstr = head + tmpstr + tail;

¿Hay alguna forma mejor de hacerlo?

Gracias de antemano.

¿Fue útil?

Solución

Si estaban preocupados por la eficiencia y quería evitar las copias temporales realizadas por el operador +, entonces se podría hacer:

tmpstr.insert(0, head);
tmpstr.append(tail);

Y si usted fuera aún más preocupado por la eficiencia, es posible añadir

tmpstr.reserve(head.size() + tmpstr.size() + tail.size());

antes de hacer la inserción / anexar para asegurar que cualquier reasignación sólo ocurre una vez.

Sin embargo, el código original es simple y fácil de leer. A veces eso es "mejor" que una forma más eficiente, pero más difícil de leer solución.

Otros consejos

Un enfoque totalmente diferente:

#include <iostream>
#include <string>
#include <sstream>

int
main()
{
  std::string tmpstr("some string here");
  std::ostringstream out;
  out << head << tmpstr << tail;
  tmpstr = out.str(); // "headsome string heretail"

  return 0;
}

Una ventaja de este enfoque es que se puede mezclar cualquier tipo para el que se sobrecarga el operador << y colocarlos en una cadena.

  std::string tmpstr("some string here");
  std::ostringstream out;
  int head = tmpstr.length();
  char sep = ',';
  out << head << sep << tmpstr;
  tmpstr = out.str(); // "16,some string here"

Se podría añadir la cola y luego cocatenate la cadena, como esto:

tmpstr.append(tail);
tmpstr = head + tmpstr; 

Probablemente sería mejor simplemente crear una nueva cadena en ese punto.

std::string finalstr(head.length() + tmpstr.length() + 1);
finalstr = head + tmpstr;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top