Colección de citas famosas - Slogan de motivación - El uso de cadenas C en archivos de encabezado

El uso de cadenas C en archivos de encabezado

1. Declarar una cadena C.

Declarar una variable string es muy sencillo:

String Str

De esta forma declaramos una variable string, pero como es una clase, hay un constructor y un destructor. La declaración anterior no pasa parámetros, por lo que el constructor predeterminado de cadena se usa directamente. La función de esta función es inicializar str en una cadena vacía. El constructor y destructor de la clase String son los siguientes:

a) String s; //Generar cadena vacía s

b) Strings(str)//Generar mediante Copiar constructor A copia de STR.

c)Strings(str, stridx)//Tome la parte "a partir de Stridx" en la cadena str como valor inicial de la cadena.

d)Strings(str, STRDX, strlen)//Tome la parte de la cadena STR que "comienza con STRDX y tiene una longitud de como máximo STRLEN" como valor inicial de la cadena.

E) string s(cstr) //Toma la cadena C como valor inicial de s.

F) string s(chars, chars_len) //Toma los primeros caracteres chars_len de la cadena C como valor inicial de la cadena s.

G) strings s (num, c)//Genera una cadena que contiene num c caracteres.

h) String s (inicio, fin) // El intervalo es el inicio; los caracteres al final (excluyendo el final) se utilizan como valor inicial de la cadena s.

I) s.~string() //Destruye todos los caracteres y libera memoria.

Es muy sencillo, así que no lo explicaré.

2. Función de operación de cadenas

Aquí está el enfoque de las cadenas C. Primero enumero las diversas funciones operativas. Si no le gusta ver todas las funciones, puede encontrar las funciones que le gustan aquí y leer su explicación detallada más adelante.

A) =, asignar()// con nuevo valor.

B) swap() //Intercambia el contenido de dos cadenas.

C) =, append(), push_back() //Agrega caracteres al final.

D) insert() //Insertar caracteres

E) erase() //Eliminar caracteres

F) clear() //Eliminar todos los caracteres.

G) replace() //Reemplazar caracteres

H) //Concatenar cadenas

i)==,! =, lt, lt=, gt, gt=, compare() //Compara cadenas

J) size(), length() //Devuelve el número de caracteres.

K) max_size() //Devuelve el máximo número posible de caracteres.

L) vacía() //Determina si la cadena está vacía.

M) capacidad() //Devuelve la capacidad del carácter antes de la reasignación.

N) reserve() //Reserva una cierta cantidad de memoria para acomodar una cierta cantidad de caracteres.

O) [], at() //Accede a un solo carácter

p)> gt, getline() //Lee un valor de la secuencia.

q) lt; lt//Escribe el valor de búsqueda en la secuencia.

R) copy() //Asignar valor a C_string.

S) c_str() //Devuelve el contenido en forma de C_string.

T) data() //Devuelve el contenido en forma de matriz de caracteres.

U) substr() //Devuelve subcadena.

v)Función de búsqueda

W)begin() end() //Proporciona soporte para iteradores similares a STL.

X) rbegin() rend() //Iterador inverso

Y) get_allocator() //Devuelve el configurador.

Introducción detallada a continuación:

2.1 Conversión de cadena c y cadena C

C

Proporcionado obteniendo de la cadena C Los métodos correspondientes a C_string deben usar data(), c_str() y copy(), donde data() devuelve el contenido de la cadena en forma de una matriz de caracteres sin agregar '\0'. C_str() devuelve una matriz de caracteres terminada en '\0', mientras que copy() copia o escribe el contenido de la cadena en una c_string existente o

en una matriz de caracteres. Las cadenas C no terminan en "\0". Mi consejo es utilizar cadenas C en sus programas a menos que c_string sea absolutamente necesario. Dado que es solo una breve introducción y una introducción detallada, si quieres conocer más precauciones de uso, puedes dejarme un mensaje (a mi bandeja de entrada). Déjame explicarlo en detalle.

2.2 Funciones de tamaño y capacidad

Una cadena C tiene tres tamaños: a) El número existente de caracteres, las funciones son tamaño() y longitud(), las dos son equivalentes. Vacío() se utiliza para comprobar si la cadena está vacía. b) Tamaño máximo ()

Este tamaño se refiere al número máximo de caracteres que puede contener la cadena C actual, lo que probablemente esté relacionado con las limitaciones de la propia máquina o el tamaño de la memoria continua donde se se encuentra la cadena. Normalmente no tenemos que preocuparnos por él, debería ser lo suficientemente grande para nosotros. Pero si no es suficiente, se generará una excepción length_error. c) antes de reasignar memoria con c)capacidad().

El número máximo de caracteres que puede contener una cadena. Otro punto a destacar aquí es la función reserve(), que reasigna memoria para cadenas. El tamaño de la redistribución está determinado por sus parámetros.

El parámetro predeterminado es 0. En este momento, la cuerda disminuirá involuntariamente.

También necesitamos repetir el tema de la cadena C y la conversión de cadena C.

Problema, muchas personas encontrarán este problema. Su programa necesita llamar a funciones y clases de otras personas (como la función de conexión de base de datos Connect (char*, char*)), pero hace referencia a funciones de otras personas.

La forma de los números es char*. Sabemos que las matrices de caracteres devueltas por c_str() y data() pertenecen a cadenas, por lo que son constantes.

Char*, si desea usarlo como parámetro de la función anterior, también debe copiarlo a un char*. Nuestro principio es no usar cadenas C. Entonces, lo que debemos hacer en este momento es: Si

Si esta función no modifica el contenido del parámetro (es decir, char*), podemos conectar ((char*)UserID.c_str( ) así.

p>

(char*)PassWD.c_str()), pero esto es peligroso, porque la cadena convertida en realidad se puede modificar (si está interesado, puede probarlo usted mismo), entonces enfatizo que a menos que los parámetros no se modifiquen al llamar a la función, de lo contrario se deben copiar a un char*. Por supuesto, de todos modos es más seguro copiarlo a un char*. Mientras tanto, cruzamos los dedos

Rezando por los expertos que todavía usan la programación con cuerdas C (no es exagerado decir que son expertos, es posible que hayan estado programando cuando todavía llevábamos pantalones sin entrepierna) , jaja) ...) para escribir una función más estandarizada, entonces.

No necesitamos yeso.

2.3 Acceso al elemento

Podemos utilizar el operador de subíndice [] y la función at() para acceder a los caracteres contenidos en el elemento.

Pero cabe señalar que el operador [] no comprueba si el índice es válido (índice válido 0~str.length()). Si el índice no es válido, se producirá un comportamiento indefinido. y at() comprobará si se utiliza.

En (), el índice no es válido y se generará una excepción fuera de rango.

Hay una excepción, las cadenas constantes. El operador de

a; [] sigue siendo válido para el valor de índice de a.length() y su valor de retorno es "\0". En otros casos, la indexación a.length() no tiene ningún efecto. Los ejemplos son los siguientes:

const string Cstr(" const string ");

string Str("string"); / OK

str . //OK

str[100]; //Comportamiento no definido

str ; /Throw_out_range

Str[Str.length()] //Comportamiento no definido.

Cstr[Cstr.length()] //Return ' \ 0 '

str at(str . length()); //Throw_out_of_range

. p>

CSTR . at(CSTR . length())////throw_out_range

No estoy de acuerdo con la siguiente referencia o asignación de puntero:

char ampr = s [2];

char * p = s[3];

Porque una vez que ocurre la reasignación, R y P dejarán de ser válidos inmediatamente. La forma de evitarlo es no utilizarlo.

2.4 Función de comparación

La cadena C admite operadores de comparación comunes (>;, gt=, lt, lt=, ==,!=), e incluso admite cadenas y comparación C de cadenas (como

str lt "Hola"). Cuando se utilizan >, >=, lt, lt= cuando se utilizan estos operadores, los caracteres se ordenan uno por uno según las "características actuales del carácter". .

Comparar. Las palabras en la parte superior del diccionario son pequeñas y el orden de comparación es de adelante hacia atrás. Cuando se encuentran caracteres desiguales, los tamaños de las dos cadenas se determinan en función de los resultados de la comparación de los dos caracteres en esa posición. Al mismo tiempo, cadena

("aaaa")

Otra poderosa función de comparación es la función miembro comparar(). Admite el procesamiento de múltiples parámetros y la comparación de valores indexados y subcadenas ubicadas por longitud. Devuelve un número entero para representar el resultado de la comparación. El significado del valor de retorno es el siguiente: 0-igual.

> 0-mayor que

Cadena s("ABCD");

s. compare("ABCD");//Devuelve 0

USCompare("dcba"); //Devuelve un valor menor que 0.

s. compare(" ab "); //Devuelve un valor mayor que 0

Comparar //Igual

s.compare(0, 2) , s, 2, 2); // La comparación entre ab y cd es menor que cero.

s.compare(1, 2, " bcx ", 2); // Compara "bc" y "bc".

¿Cómo te va últimamente? ¡Completamente funcional! ¿Qué? ¿No puedes satisfacer tu apetito? Bien, espera un minuto, habrá un algoritmo de comparación más personalizado más adelante. Primero déjame darte una pista: utiliza el algoritmo de comparación STL. ¿Qué? ¿No sabes nada sobre STL? ¡Maldita sea, tú lo reconstruyes!

2.5 Cambiar contenido

Esto representa gran parte de las operaciones de cadenas.

Hablemos primero de la tarea. El primer método de asignación, por supuesto, utiliza el operador =, y el nuevo valor puede ser una cadena (como s=ns).

, c_string (como s="gaint ") o incluso un solo carácter (como s='j '). También puede utilizar la función miembro asignar (), que le permite asignar valores de cadena de manera más flexible. Tomemos un ejemplo:

s.assign(str); //No digas

s.assign(str, 1, 3); //Si str es "iamangel" ", Simplemente asigna el valor "ama" a la cadena.

s.assign(str, 2, string::NPOs); //Asigna la cadena str desde el valor de índice 2 hasta el final a S.

US asignar("gaint"); //No decir

s.assign("Nico", 5); //Cambiar "n'' i'' c ' 'o''\0" se asigna a la cadena.

s.assign(5, ' x '); //Asigna cinco valores de x a la cadena.

Hay tres formas de borrar una cadena: s = s. clear(); s. erase(); ¡Cada vez siento que dar ejemplos es más fácil de entender para los demás que hablar! ).

String proporciona muchas funciones para insertar, eliminar, reemplazar y agregar caracteres.

Primero agreguemos caracteres (la adición aquí está al final). Estas funciones son =, append() y push_back(). Los ejemplos son los siguientes:

s = str; //Agregar una cadena

s = "Mi nombre es jiayp" //Agregar una cadena C

; s = ' a '; //Agrega un carácter

s.append(string);

s.append(str, 1, 3); //No interpretas el anterior La parametrización de funciones tiene la misma explicación.

S.append(str, 2, string::npos)//Sin explicación.

s.append("Mi nombre es jiayp ");

s.append("Nico", 5);

s.append(5, ' x ');

s . push _ back (' a '); // Esta función solo puede aumentar la familiaridad de un solo carácter con STL, que es muy simple y fácil de entender.

Tal vez necesites insertar una cadena en algún lugar en el medio de la cadena. En este caso, puede utilizar la función insert(), que requiere que especifique el índice de la posición de inserción después de la cual se colocará la cadena insertada.

s.insert(0, "Mi nombre");

s.insert(1, str);

Esta forma de insert() La función no admite el paso de un solo carácter, por lo que el carácter único debe escribirse como una cadena (repugnante). Como me siento disgustado, no me queda más remedio que seguir leyendo el siguiente párrafo: para inserción.

La función Insert() proporciona dos funciones sobrecargadas para insertar caracteres individuales: insertar (índice de tipo_tamaño, número de tipo_tamaño, gráfico.

c) e insertar (posición del iterador, número de tipo de tamaño, chart.

c) Prueba. Donde tipo_tamaño es un entero sin signo y el iterador es char*, por lo que la función de inserción no se puede llamar así: insert(0, 1,

j' );¿A cuál se convertirá el primer parámetro en este momento? Entonces tienes que escribir: insert ((string:: size_type) 0, 1, 'j')! La segunda forma significa que

tiene una forma de iterador que inserta caracteres, que se mencionará más adelante. Por cierto, muchas operaciones de cadenas utilizan iteradores STL, que son lo más parecidos posible a STL.

La función eliminar() tiene varias formas (¡qué molesta!), y hay varias funciones de reemplazo reemplazar(). Por ejemplo:

string s = " il8n

s.replace(1, 2, "Internationalization"); //Reemplace los dos comenzando desde el índice 1 con la siguiente C_string.

s.erase(13); //Eliminar todo del índice 13.

s.erase(7, 5); //Eliminar 5 del índice 7.

p>

2.6 Extracción de subcadenas y concatenación de cadenas

La función de la subcadena es substr(), como se muestra a continuación:

s. Contenido.

s. substr(11); //Subcadena después del índice 11

s.substr(5, 6); //6 a partir del índice 5. >

La función que combina dos cadenas es. (Si no comprende, llame al 120)

2.7 Operaciones de entrada y salida

1. una cadena de la secuencia.

2. lt ltEscribe una cadena en la secuencia de salida

Otra función es getline(), que lee desde la línea de entrada hasta un carácter de nueva línea. se encuentra o se alcanza el final del archivo

2.8 Buscar y encontrar

Hay muchas funciones de búsqueda potentes, que incluyen:

Buscar(). /p>

rfind()

find_first_of()

find_last_of()

find_first_not_of()

find_last_not_of()

Estas funciones devuelven el índice del primer carácter en un rango de caracteres que satisface los criterios de búsqueda, o npos si no se encuentra el objetivo. Los parámetros para todas las funciones se describen a continuación:

. El primero. El parámetro es el objeto de búsqueda. El segundo parámetro (opcional) representa el índice del punto de inicio de la búsqueda en la cadena, y el tercer parámetro (opcional) representa el número de caracteres a buscar. Entiende, puedes preguntarme. Responde en serio. Por supuesto, las búsquedas STL más potentes se mencionarán más adelante.

Finalmente, el tipo de NPO es string::size_type. a NPO Para comparar, el valor del indicador debe ser del tipo string::size). En más casos, podemos comparar directamente la función con NPO (como if (s.find ("jia") == string:).