Métodos de ajuste de cadena C ++

Métodos de ajuste de cadena C ++
Recortar una cuerda significa quitar espacios blancos en la parte delantera y detrás de la cuerda. La siguiente pregunta es, ¿qué son los espacios blancos?? La siguiente es una lista de espacios blancos en una cadena:
  • "o '\ 040': espacio presionando la tecla de la barra espaciadora
  • '\ n': Feed de línea
  • '\ r': regreso del carro
  • 'F': FUERA FORMA
  • '\ t': pestaña horizontal
  • '\ V': pestaña vertical

C ++ no tiene una función para recortar una cadena. Hay un tema en programación de computadoras llamado expresiones regulares, regex abreviado. Este sujeto tiene esquemas, que permiten al programador buscar una subtracción en una cadena de destino y reemplazar la sub-string encontrada. La sub-string encontrada se puede reemplazar por nada, y así es.

La búsqueda y reemplazo con nada se puede usar para recortar una cadena. Así que busque todos los caracteres de espacio en blanco frente a la cuerda y a todos los caracteres del espacio blanco detrás de la cuerda, y reemplácelos sin nada. Afortunadamente, C ++ tiene una biblioteca regex, que debe incluirse en el programa para hacer esto.

Contenido del artículo

  • Introducción - Ver arriba
  • Resumen de expresiones regulares
  • Buscar y reemplazar
  • Recorte propiamente dicho
  • Conclusión

Resumen de expresiones regulares

Regular
Considere la cadena:

"Esto es todo para el espectáculo"

Los primeros cuatro caracteres de esta cadena forman la subtracción, "esto". Los últimos cuatro caracteres de la cadena forman la última substing, "Show".

Ahora, toda la cadena se llama cadena de destino o simplemente objetivo. La subtracción "esto" o "show" se llama expresión regular o simplemente, regex.

Pareo
Si se busca y se encuentra "esto" en el objetivo, entonces se dice que la coincidencia ha ocurrido. Si se busca y se encuentra "show", entonces se dice que la coincidencia ha ocurrido. La coincidencia ocurre para cualquier cadena de destino cuando se encuentra una subtracción. La sub-string se puede reemplazar. Por ejemplo, "esto" se puede reemplazar con "aquí" y "show" se puede reemplazar con "juego" para tener el nuevo objetivo,

"Aquí está para el juego"

Si las primeras y las últimas palabras no se buscaban en absoluto, entonces podrían ser reemplazadas por nada, para tener,

"¿Es para el"

Este último resultado es un recorte poco convencional, que desafortunadamente aún termina con un espacio al principio, y otro espacio al final.

Patrón
Una substrucción contundente ("esto" o "show"), como se ilustra arriba, es un patrón simple. Considere el siguiente objetivo:

"Oye, eso es un bate en el medio del camino."

El programador puede querer saber si es una rata, gato o murciélago ya que estas tres palabras son similares en sonido. Necesita un patrón para identificar la palabra "gato" o "rata" o "murciélago". Observe que cada una de estas palabras termina con "AT" pero comienza con 'B' o 'C' o 'R'. El patrón, para que coincida con cualquiera de estas tres palabras, es

[bcr] en

Esto significa, coincidir con 'B' o 'C' o 'R', seguido de "AT".

Repetición
x*: significa coincidir 'x' 0 o más veces, yo.mi., cualquier cantidad de veces.

Ejemplos coincidentes
El siguiente programa produce una coincidencia para "BAT" en la cadena de destino, utilizando el objeto Regex, Reg ("[BCR] AT"), cuyo patrón es [BCR] AT.

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

regex reg ("[bcr] at");
if (regex_search ("oye, ese es un bate en el medio del camino.", reg))
cout << "matched" << endl;
demás
cout << "not matched" << endl;
regresar 0;

La salida es: coincidente.

La biblioteca Regex se incluye con "#include". El objeto regex se instancia con la declaración,

regex reg ("[bcr] at");

[/cc]

La función regex_search () de la biblioteca toma dos argumentos aquí. El primero es la cadena de destino. El segundo es el objeto regex. El patrón, [bcr] en "bat" coincidente y, por lo tanto, la función regex_search () devuelve verdadero. De lo contrario, habría regresado, falso.

El siguiente programa ilustra una coincidencia del patrón, bo*k para "libro":

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

regex reg ("bo*k");
if (regex_search ("El libro es bueno.", reg))
cout << "matched" << endl;
demás
cout << "not matched" << endl;
regresar 0;

La salida es: coincidente. o* significa, coincidir con 'o', cero o más veces. En realidad coincidió con 'O', dos veces en "Libro".

Comenzando el comienzo de la cadena de destino
Para que coincida con el comienzo de una cadena de destino, el patrón tiene, para empezar, ^ . El siguiente programa coincide con "esto" al comienzo de la cadena de destino: "Esto es para el programa".

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

regex reg ("^this");
if (regex_search ("Esto es para el programa", reg))
cout << "matched" << endl;
demás
cout << "not matched" << endl;
regresar 0;

La salida es: coincidente. Observe el Regex Literal, "^esto" .

Final coincidente de la cadena objetivo
Para que coincida con el final de una cadena de destino, el patrón tiene que terminar con $. El siguiente programa coincide con "Show" al final de la cadena de destino, "Esto es para el programa".

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

regex reg ("show $");
if (regex_search ("Esto es para el programa", reg))
cout << "matched" << endl;
demás
cout << "not matched" << endl;
regresar 0;

La salida es: coincidente. Observe el literal de regex, "mostrar $" .

Alternativas coincidentes
Para que coincida con la subtracción inicial o la sub-string final, el | MetaAracter tiene que separar los patrones de principio y final en el patrón general. El siguiente programa ilustra esto:

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

regex reg ("^this | show $");
if (regex_search ("Esto es para el programa", reg))
cout << "matched" << endl;
demás
cout << "not matched" << endl;
regresar 0;

La salida es: coincidente. Observe el literal de regex, "^este | mostrar $" .

Ahora, la función regex_search () generalmente coincide con la primera opción de patrón y se detiene. Este caso coincide con "esto" al comienzo del objetivo y se detiene sin continuar coincidiendo con el "espectáculo" al final del objetivo.

Afortunadamente, la función REGEX_REPLACE () de la biblioteca Regex C ++ reemplaza todas las alternativas en cualquier lugar de la cadena de destino en su modo predeterminado. Y así, esta función regex_replace () es adecuada para recortar cadenas. Es decir, busque el espacio blanco total frente a la cuerda y busque el espacio blanco total detrás de la cuerda y reemplace ambos sin nada.

Buscar y reemplazar

El siguiente programa reemplaza las primeras y últimas palabras, de la cadena objetivo, con la palabra, "perro":

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

char str [] = "Este es para el programa";
String Newstr = regex_replace (str, regex ("^this | show $"), "perro");
cout << newStr << endl;
regresar 0;

La salida es:

Perro es para el perro

El programa utiliza la función regex_replace (). El primer argumento es la cadena de destino. El segundo argumento es el objeto regex. El tercer argumento es la cadena de reemplazo literal. La cadena de retorno es el objeto de cadena modificado. Entonces la clase de cadena tenía que ser incluida.

Recorte propiamente dicho

Considere la cadena:

"\ t quiero democracia! \norte"

Dos personajes de espacios blancos, '\ t' y ", están frente al texto útil. Otros dos personajes de espacios blancos, "y '\ t', están detrás del texto útil. Recortar significa eliminar todos los caracteres del espacio blanco frente al texto y eliminar todos los caracteres del espacio blanco detrás del texto.

Para que coincida con los dos primeros personajes aquí, el patrón es "\ t | ", Es decir, '\ t' o un espacio. Para que coincidan con los dos últimos caracteres aquí, el patrón es "| \ t", es decir, un espacio o '\ t'. Sin embargo, el programador generalmente no sabe de qué consiste un espacio blanco en particular en. Entonces, lo mejor que puede hacer es tener en cuenta todas las combinaciones posibles para todos los caracteres del espacio blanco, con el patrón, "| \ t | \ n | \ r | \ v | \ f". Tenga en cuenta el uso de la regex u operador, | .

Todavía hay un problema. El patrón, ”| \ t | \ n | \ r | \ v | \ f" coincidiría solo con un carácter de espacio blanco al comienzo de la cadena y coincidiría con solo un carácter de espacio blanco al final de la cadena. Esto se debe a la | operadores. Por lo tanto, este patrón debe modificarse para que coincida con todos los caracteres del espacio blanco al comienzo de la cadena o al final de la cadena. Por lo tanto, cualquier personaje posible debe coincidir cero o más veces de la sintaxis, x* . Y el patrón final para que coincida con los personajes de espacios blancos consecutivos es

"[| \ t | \ n | \ r | \ v | \ f]*"

Para que coincida con caracteres consecutivos de espacio blanco al comienzo de la cadena, use,

"^[| \ t | \ n | \ r | \ V | \ f]*"

Tenga en cuenta la presencia y posición de ^ .

Para que coincida con caracteres consecutivos de espacio blanco al final de la cadena, use,

"[| \ t | \ n | \ r | \ v | \ f]*$"

Tenga en cuenta la presencia y posición de $ . Y para que coincidan con los caracteres consecutivos del espacio blanco al comienzo o al final de la cadena, use,

"^[| \ t | \ n | \ r | \ v | \ f]*| [| \ t | \ n | \ r | \ V | \ f]*$"

Tenga en cuenta el uso de | en el medio del patrón general.

Después de coincidir, todos los personajes de espacios blancos se reemplazan por nada, es decir, "", la cadena vacía. Recuerde que la función regex_replace () reemplaza todas las ocurrencias de sub-strings coincidentes con el patrón en toda la cadena de destino.

El siguiente programa, recorta la cadena de destino, "Quiero democracia! \ n "a" Quiero democracia!":

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

char str [] = "\ t quiero democracia! \norte";
cadena retstr = regex_replace (str, regex ("^[| \ t | \ n | \ r | \ v | \ f]*| [| \ t | \ n | \ r | \ v | \ f]*$" ), "");
cout << retStr << endl;
regresar 0;

La salida es:

Quiero democracia!

Conclusión

Recortar una cuerda significa quitar los espacios blancos en la parte delantera y detrás de la cuerda. Un espacio blanco consiste en personajes de espacios blancos. Los personajes del espacio en blanco son ", '\ n', '\ r', 'f', '\ t" \ V'. Para recortar una cadena en C ++, incluida la biblioteca Regex, y use la función regex_replace () para buscar y reemplazar. Reemplace cualquier espacio blanco al inicio y/o al final de la cadena con la cadena vacía.