Las cadenas de C ++ se pueden declarar de dos maneras principales: como un puntero constante a los chars (matriz de caracteres) o instanciado desde la clase de cadena de la biblioteca de cadenas. Aquí, las funciones pop_back () y Erase () son del objeto String, instanciado desde la clase de cadena. El último elemento de una matriz de Chars no se puede eliminar porque una matriz de Chars no es un objeto instanciado.
Es cierto que una cadena literal consiste en valores que son caracteres. Cada personaje está dentro de un elemento. Entonces, la cadena literal en realidad consiste en elementos. El último personaje se elimina con su último elemento.
Este artículo explica cómo eliminar el último elemento de una cadena, junto con su carácter.
Contenido del artículo
void pop_back ()
Esta función miembro de la clase de cadena elimina el último elemento de la cadena. La función devuelve nula. Esto significa que no se devuelve nada, y ninguna variable puede recibir nada devuelto de él. El uso de esta función se ilustra en el siguiente programa:
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
cadena str = "lmnopqr";
cout <stri.pop_back ();
para (int i = 0; icout < cout < regresar 0;
La salida es:
Lmnopqr
Lmnopq
El último personaje ha sido eliminado. Las dos primeras líneas del programa incluyen las bibliotecas necesarias. Uno de ellos, por supuesto, es la biblioteca de cadenas. La biblioteca de cadenas debe incluirse ya que todas las cadenas involucradas se instancian desde la clase de cadena. La siguiente línea es una declaración. Declara que todos los nombres a continuación son del espacio de nombres estándar a menos que se indique lo contrario.
El cuerpo de la función principal () comienza con la declaración (instanciación) del objeto de cadena. La siguiente declaración muestra el literal de esta cadena recién declarada en la salida. La declaración después de eliminar el último carácter, usando la función miembro pop_back (). El siguiente segmento de código utiliza un for-bucle con índices para mostrar todos los caracteres, que ya no tienen el último, en una secuencia continua.
Borras de iterador (const_iterator p)
Si el iterador apunta al último elemento (carácter), entonces la función de miembro de borrado puede eliminar el último elemento. Esta función devuelve un iterador que apunta al elemento justo después de la eliminación (o justo después del último elemento, si el eliminado fue el último elemento). El siguiente programa ilustra esto:
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
cadena str = "lmnopqr";
cout <cadena :: iterator p = str.fin();
pag--;
string :: iterator it = str.borrar (p);
para (int i = 0; icout < cout < regresar 0;
La salida es:
Lmnopqr
Lmnopq
Las primeras tres líneas del programa se explican de la misma manera que del programa anterior. En el cuerpo de la función main (), la primera declaración declara el objeto de cadena. La siguiente declaración muestra el literal de esta cadena recién declarada en la salida. Esta impresión aún podría haberse realizado con un for-bucle. La declaración posterior obtiene un iterador que apunta justo después del último elemento de carácter. Esto se hace con la función miembro, end (). Tenga en cuenta la forma en que se declaró el iterador (lado izquierdo de, =). Entonces el iterador está disminuido para apuntar al último elemento.
A continuación, el último elemento se elimina con la función miembro ERASE (). El siguiente segmento de código utiliza un bucle for-loop con índices para mostrar todos los caracteres, que ya no tienen el último en el terminal en una secuencia continua.
ERASE ITERATOR (const_iterator primero, const_iterator Último)
Esta función miembro borraría una gama de elementos de caracteres de la cadena. Aquí, primero hay un iterador que apunta al primer elemento del rango. El iterador devolvió puntos al elemento que estaba allí, justo después del rango. Si no hubiera elementos allí, apuntaría al final de la cadena. El último es un iterador que apunta al último elemento del rango. Este último elemento no está involucrado en el borrado.
Para eliminar el último elemento, el truco es hacer "último", apunte justo más allá del último elemento de la cadena; y haz el "primer" punto en el último elemento de la cadena. Con todo eso, la función de borrado quitará el último elemento. El siguiente programa muestra cómo se hace:
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
cadena str = "lmnopqr";
cout <cadena :: iterator p = str.comenzar();
p = p + 6;
string :: iterator q = str.fin();
string :: iterator it = str.borrar (p, q);
para (it = --it; it> = str.comenzar(); él--)
cout << *it;
cout <regresar 0;
La salida es:
Lmnopqr
Qponml
Después de eliminar el personaje, R (junto con su elemento), la cadena restante se imprimió carácter por caractergor, pero en el orden inverso.
Las primeras tres líneas del programa se explican de la misma manera que del programa anterior. En el cuerpo de la función main (), la primera declaración declara el objeto de cadena. La siguiente declaración imprime la cadena recién declarada.
El segmento de código que sigue tiene tres declaraciones. El primero declara a un iterador que apunta al primer carácter de la cadena. Seis caracteres más de la cuerda deben contarse antes del último personaje, se alcanza 'R'. Entonces, la segunda declaración de este segmento agrega 6 al iterador. La siguiente declaración en este segmento declara a un iterador, Q, que apunta justo después del final de la cadena. La situación ahora está preparada para borrar el último elemento: Q puntos justo después de 'R' y P señala 'R'.
La declaración que borra 'R' es:
string :: iterator it = str.borrar (p, q);
Después de que se borra 'R', el último personaje se convierte en 'Q'. El iterador devuelto, 'it' aquí, apunta justo después de 'Q'.
El siguiente segmento de código es un for-bucle. La declaración de inicialización de este bucle simplemente disminuye "it" para señalar el nuevo último carácter, 'Q'. 'Q' se imprime en la terminal. El for-loop continúa disminuyendo "it", imprimiendo el carácter correspondiente, mientras que 'it' es mayor que STR.comenzar(). Cuando "it" es igual a str.begin (), es decir, "it" apunta a 'l', las impresiones de bucle 'l' y se detienen. De esta manera, la cadena sin 'r' se imprime en orden inverso.
Para obtener el valor apuntado a un iterador, precede al iterador con el operador de indirección, * .
BASIC_STRING & ERASE (size_type pos = 0, size_type n = npos)
Esta función miembro borra un rango, al igual que la función anterior. Sin embargo, utiliza índices y no iteradores. Si el argumento POS es 0, entonces el rango comienza desde el primer elemento. Si el argumento n es la longitud de la cadena (número de caracteres), entonces el rango termina en el último carácter. Ambos argumentos tienen sus valores predeterminados. Esta función devuelve el objeto de clase de cadena, con los caracteres del rango eliminado.
El truco para jugar aquí es hacer del valor de POS el índice del último personaje. El índice del último carácter (elemento) es el tamaño (longitud) de la lista menos 1. El segundo argumento aquí debe omitirse para este problema. El último índice se da por,
stri.tamaño () - 1
El siguiente programa usa esta función miembro, para quitar el último carácter, 'R' de la cadena:
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
cadena str = "lmnopqr";
cout <int l = str.tamaño () - 1;
cadena ret = str.borrar (l);
para (int i = 0; icout < cout < para (int i = 0; i cout < cout < regresar 0;
La salida es:
Lmnopqr
Lmnopq
Lmnopq
La cadena original y devuelta perdió 'r'. Las primeras tres líneas del programa se explican de la misma manera que del programa anterior. En el cuerpo de la función main (), la primera declaración declara el objeto de cadena. La siguiente declaración imprime la cadena recién declarada.
La siguiente declaración determina el índice del último elemento de la cadena original. La declaración después de borrar el último carácter usando este índice. El siguiente segmento de código imprime los caracteres de la cadena de retorno, uno por uno, usando índices. El último segmento de código imprime los caracteres de la cadena original, uno por uno, usando índices.
Conclusión
La función de miembro de clase de cadena normal, para eliminar el último carácter de una cadena, con su elemento que lo sostiene, es la función pop_back (). Hay tres funciones de miembros sobrecargados ERASE () que también se pueden usar para esto. Uno de ellos toma un iterador que apunta al último personaje y elimina el último personaje. Otro toma un rango, indicado por dos iteradores: un iterador apunta al último personaje y los otros puntos justo después del último personaje. Con eso, el último personaje se quita. La tercera función sobrecargada utiliza el índice del último carácter para eliminarlo. Toda la discusión en este artículo ha sido compatible con C ++ 20.