Vista de cadena C ++

Vista de cadena C ++
El conteo de índice de caracteres de cadena comienza desde cero (no uno). Un rango de cadenas es una secuencia continua de caracteres de una cadena literal. Toda la cuerda es una gran gama. Se pueden obtener rangos más pequeños de una cadena. La idea de una vista de cadena es obtener un rango decidido de una cadena, de modo que el rango es como una cadena independiente cuya propia carácter está en el índice cero. Aunque un objeto de visión de cadena puede ser independiente, es oficialmente una vista de rango y no se puede cambiar normalmente.

La vista de cadena es una clase de su propia biblioteca que debe incluirse en un programa C ++ de la siguiente manera:

#incluir

Tiene funciones miembros que se han clasificado en los siguientes encabezados: construcción, capacidad, acceso de elementos, soporte de iterador, modificadores, operaciones de cadena y búsqueda. Extrañamente, String_View tiene modificadores, que entra en conflicto con su definición. Que se aclara a continuación en este tutorial. Todo el código de vista de cadena en este tutorial está en la función C ++ Main ().

Contenido del artículo

  • Construcción
  • Capacidad
  • Acceso al elemento
  • Soporte iterador
  • Modificadores
  • Operaciones de cadena
  • buscando
  • Conclusión

Construcción
BASIC_STRING_VIEW (CONST gráfico* STR)

Esto construye una visión de cadena, desde una cadena completa literal, de constante ponder a personajes. Lo siguiente, ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str);
cout <regresar 0;

La salida es:

uno dos tres CUATRO CINCO

Observe que String_View, en lugar de Basic_String_View, se ha utilizado para el nombre del constructor.

BASIC_STRING_VIEW (CONST gráfico* STR, size_type len)

Esta función de miembro ventana los primeros caracteres de LEN del argumento de cadena. Windowing no está copiando. No hay copias del constructor de visión de cadena. Ellos solo hacen referencia. El siguiente programa muestra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
cout <regresar 0;

La salida es:

Uno, dos, tres

BASIC_STRING_VIEW (const BASIC_STRING_VIEW &)

Este constructor es el mismo que el primer constructor anterior, pero su argumento es un objeto String_View, que ya tenía su vista. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
string_view strvv (strv);
cout <regresar 0;

La salida es:

Uno, dos, tres

BASIC_STRING_VIEW & Operator = (const BASIC_STRING_VIEW &)

Este constructor miembro es similar al anterior, pero el String_View se asigna y no se pasa como argumento. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
string_view strvv = strv;
cout <regresar 0;

La salida es:

Uno, dos, tres

Capacidad
size_type size () const

Recuerde, un String_View es un rango de alguna cadena original. No es una copia de la gama. Tiene referencias a los elementos de caracteres de la gama en la cadena original. El tamaño de este string_view (vista de ventana) todavía se puede determinar porque el string_view es un objeto instanciado desde la clase String_view. El tamaño se devuelve por la función de miembro size (). El siguiente programa demuestra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
int sz = strv.tamaño();
cout <regresar 0;

La salida es:

13

bool vacía () const

Se puede crear un objeto String_View vacío, como se muestra en el siguiente programa. Cuando está vacía, la función de miembro vacío () devolverá verdadero; De lo contrario, devolverá falso. El programa es:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

string_view strv;
bool bl = strv.vacío();
cout <regresar 0;

La salida es 1, para verdadero. Tenga en cuenta que el objeto String_View se creó sin paréntesis y sin ningún argumento.

Acceso al elemento
const_reference operador [] (size_type pos) const

El operador de soporte cuadrado se puede usar para leer un valor (carácter) en el string_view. El siguiente programa utiliza un bucle for-loop para ilustrar esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
para (int i = 0; i cout <cout <regresar 0;

La salida es:

Uno, dos, tres

Nota: No se puede cambiar un personaje en un objeto String_View. Cualquier cambio posible debe hacerse en la cadena original.

Soporte iterador
const_iterator begin () const

Esta función miembro devuelve un iterador constante que apunta al primer elemento de caracteres del objeto String_View. Aquí, const_iterator significa que el personaje no se puede cambiar. Sin embargo, el iterador puede incrementarse para apuntar al siguiente elemento de caracteres; o agregue un entero similar a agregar un entero a un índice para apuntar a otro elemento de caracteres por delante. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
string_view :: const_iterator it = strv.comenzar();
it ++;
it = it + 4;
cout <<*it <regresar 0;

La salida es 'W'. Tenga en cuenta que se ha construido el iterador.

const_iterator end () const

Esta función de miembro devuelve un iterador constante que apunta justo después del último elemento de caracteres del objeto String_View. El iterador se puede disminuir para apuntar al último elemento de caracteres o restarse a un entero, de manera similar a restar un entero de un índice, para apuntar a otro elemento de caracteres antes. Aquí, const_iterator significa que el personaje no se puede cambiar. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
string_view :: const_iterator it = strv.fin();
él--;
it = it - 4;
cout <<*it <regresar 0;

La salida es 't'.

Modificadores
void remove_prefix (size_type n)

Esto elimina una primera sub-string de String_View, pero no elimina ningún carácter de la cadena original. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
cout <strv.remove_prefix (4);
cout <cout <regresar 0;

La salida es:

Uno, dos, tres
dos tres
uno dos tres CUATRO CINCO

void remove_suffix (size_type n)

Esto elimina una última substing de String_View, pero no elimina ningún carácter de la cadena original. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
cout <strv.remove_suffix (6);
cout <cout <regresar 0;

La salida es:

Uno, dos, tres
uno dos
uno dos tres CUATRO CINCO

Operaciones de cadena
size_type Copy (gráfico* s, size_type n, size_type pos = 0) const

Esta función copia un rango de caracteres desde el objeto String_View (no la cadena original) para reemplazar la primera sub-string de otra cadena. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

char strb [] = "aaa bbb ccc ddd eee";
const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
cout <strv.copia (strb, 3, 4);
cout <cout <regresar 0;

La salida es:

Uno, dos, tres
Dos BBB CCC DDD EEE
uno dos tres CUATRO CINCO

Hay dos cuerdas independientes aquí. El string_view no es una cadena independiente. Es una ventana de rango de una de las cuerdas independientes. Tenga en cuenta que el primer parámetro de la función del miembro, "Gráfico* s" significa una matriz de Chars y no un const-Char* .

int Compare (BASIC_STRING_VIEW S) const

El número de caracteres de dos string_views se compara aquí. Si el uno, usando la función miembro compare (), es más alto, entonces se devuelve un número positivo. Si los números son iguales, entonces se devuelve cero. Si el objeto String_View que emplea la función miembro tiene un número más bajo, se devuelve un número negativo. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* stra = "uno dos tres cuatro cinco";
string_view strva (stra, 13);
cout <const char* strb = "aaa bbb ccc ddd eee";
string_view strvb (strb, 11);
cout <int ret = strvb.comparar (STRVA);
cout <regresar 0;

La salida es:

Uno, dos, tres
AAA BBB CCC
-14, en la computadora del autor.

buscando
size_type find (const gráficos* s, size_type pos = 0) const

Esta función de miembro busca la ocurrencia de la primera substing, s en el string_view en cuestión. Devuelve el índice del primer carácter de la subtracción encontrada. Si no se encuentra, devuelve -1. El segundo argumento dice dónde comienza la búsqueda (el índice predeterminado es 0). El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "uno dos tres cuatro cinco";
string_view strv (str, 13);
cout <const char* cs = "dos";
int ret = strv.encontrar (cs, 0);
cout <regresar 0;

La salida es:

Uno, dos, tres
4

Conclusión

Un string_view es una vista de ventana de una variedad de una cadena original. No es una copia de los caracteres. Se hace referencia a los personajes. Hay una clase de vista de cadena desde la cual se instancian los objetos String_View. String-View tiene muchas funciones de miembros. Las funciones básicas de los miembros de las diferentes categorías se han explicado anteriormente.