Metodi di rivestimento stringa C ++

Metodi di rivestimento stringa C ++
Trignare una corda significa rimuovere gli spazi bianchi davanti e dietro la corda. La prossima domanda è: quali sono gli spazi bianchi? Quello che segue è un elenco di spazi bianchi in una stringa:
  • "o '\ 040': spazio premendo il tasto barra spaziale
  • '\ n': feed di linea
  • '\ r': ritorno in carrozza
  • 'f': forma di forma
  • '\ t': scheda orizzontale
  • '\ V': scheda verticale

C ++ non ha una funzione per tagliare una stringa. C'è un soggetto nella programmazione informatica chiamata, espressioni regolari, abbreviato regex. Questo soggetto ha schemi, che consentono al programmatore di cercare una sotto-corda in una stringa di destinazione e sostituire la sotto-corda trovata. La sotto-corda trovata può essere sostituita con nulla, e così cancellarla.

La ricerca e il posto con nulla può essere usato per tagliare una stringa. Quindi cerca tutti i caratteri dello spazio bianco davanti alla corda e tutti i caratteri dello spazio bianco dietro la corda e sostituiscili con nulla. Fortunatamente, C ++ ha una libreria Regex, che deve essere inclusa nel programma per farlo.

Contenuto dell'articolo

  • Introduzione - Vedi sopra
  • Riepilogo delle espressioni regolari
  • Cerca e sostituisci
  • Taglio corretto
  • Conclusione

Riepilogo delle espressioni regolari

Regex
Considera la stringa:

"Questo è tutto per lo spettacolo"

I primi quattro caratteri di questa stringa formano la sotto-corda, "questo". Gli ultimi quattro caratteri della stringa formano l'ultima sotto-corda, "Show".

Ora, l'intera stringa è chiamata stringa di destinazione o semplicemente target. La sotto-stringa "questo" o "spettacolo" è chiamata espressione regolare o semplicemente, regex.

Abbinamento
Se "questo" viene cercato e situato nel bersaglio, si dice che si sia verificata la corrispondenza. Se si verifica e si trova lo "spettacolo", si dice ancora che si sia ancora verificata la corrispondenza. La corrispondenza si verifica per qualsiasi stringa di destinazione quando si trova una sotto-corda. La sotto-corda può essere sostituita. Ad esempio, "questo" può essere sostituito con "qui" e "show" può essere sostituito con "gioco" per avere il nuovo target,

"Eccolo per il gioco"

Se le prime e le ultime parole non fossero affatto desiderate, allora non potevano essere sostituite con nulla, per avere,

"È per il"

Quest'ultimo risultato è un taglio non convenzionale, che purtroppo termina ancora con uno spazio all'inizio e un altro spazio alla fine.

Modello
Una sotto-corda smussata ("questo" o "spettacolo"), come illustrato sopra, è un modello semplice. Considera il seguente obiettivo:

"Ehi, questa è una mazza in mezzo alla strada."

Il programmatore potrebbe voler sapere se è un ratto, un gatto o un pipistrello poiché queste tre parole sono simili nel suono. Ha bisogno di uno schema per identificare la parola "gatto" o "ratto" o "pipistrello". Si noti che ciascuna di queste parole termina con "AT" ma inizia con "B" o "C" o "R". Il modello, per abbinare una di queste tre parole, è

[BCR] AT

Ciò significa, abbinare "b" o "c" o "r", seguito da "AT".

Ripetizione
x*: significa corrispondere 'x' 0 o più volte, i.e., qualsiasi numero di volte.

Esempi corrispondenti
Il seguente programma produce una corrispondenza per "BAT" nella stringa target, usando l'oggetto regex, reg ("[bcr] at"), il cui modello è [BCR] AT.

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

regex reg ("[bcr] at");
if (regex_search ("Ehi, è una mazza in mezzo alla strada.", reg)
cout << "matched" << endl;
altro
cout << "not matched" << endl;
restituzione 0;

L'output è: abbinato.

La libreria Regex è inclusa con "#include". L'oggetto regex è istanziato con l'istruzione,

regex reg ("[bcr] at");

[/cc]

La funzione regex_search () dalla libreria prende due argomenti qui. Il primo è la stringa di destinazione. Il secondo è l'oggetto regex. Il modello, [bcr] a corrispondenza "pipistrello" e quindi la funzione regex_search () è tornata vera. Altrimenti, sarebbe tornato, falso.

Il seguente programma illustra una corrispondenza del modello, bo*k per "libro":

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

regex reg ("bo*k");
if (regex_search ("Il libro è buono.", reg)
cout << "matched" << endl;
altro
cout << "not matched" << endl;
restituzione 0;

L'output è: abbinato. o* significa, abbinare 'o', zero o più volte. In realtà ha abbinato "O", due volte in "libro".

Inizio corrispondente della stringa di destinazione
Per abbinare l'inizio di una stringa di destinazione, il modello ha, per cominciare, ^ . Il seguente programma corrisponde a "questo" all'inizio della stringa di destinazione, "Questo è per lo spettacolo".

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

regex reg ("^this");
if (regex_search ("Questo è per lo spettacolo", reg))
cout << "matched" << endl;
altro
cout << "not matched" << endl;
restituzione 0;

L'output è: abbinato. Notare il regex letterale, "^questo" .

Fine corrispondente della stringa target
Per abbinare la fine di una stringa di destinazione, il modello deve terminare con $. Il seguente programma corrisponde a "Show" alla fine della stringa di destinazione, "Questo è per lo spettacolo".

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

regex reg ("show $");
if (regex_search ("Questo è per lo spettacolo", reg))
cout << "matched" << endl;
altro
cout << "not matched" << endl;
restituzione 0;

L'output è: abbinato. Notare il regex letterale ", Show $" .

Alternative corrispondenti
Per abbinare la sotto-corda iniziale o la sotto-corda finale, | Il meta-character deve separare i modelli di inizio e fine nel modello generale. Il seguente programma illustra questo:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

regex reg ("^this | show $");
if (regex_search ("Questo è per lo spettacolo", reg))
cout << "matched" << endl;
altro
cout << "not matched" << endl;
restituzione 0;

L'output è: abbinato. Nota il regex letterale, "^questo | Show $" .

Ora, la funzione regex_search () corrisponde in genere alla prima opzione di pattern e si ferma. Questo caso corrisponde a "questo" all'inizio del bersaglio e si ferma senza continuare a abbinare lo "spettacolo" alla fine del bersaglio.

Fortunatamente, la funzione regex_replace () della libreria Regex C ++ sostituisce tutte le alternative ovunque nella stringa di destinazione nella sua modalità predefinita. E così, questa funzione regex_replace () è adatta per tagliare le stringhe. Cioè, cerca lo spazio bianco totale davanti alla corda e cerca lo spazio bianco totale dietro la corda e sostituisci entrambi con nulla.

Cerca e sostituisci

Il seguente programma sostituisce la prima e l'ultima parola, della stringa target, con la parola "cane":

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

char str [] = "Questo è per lo spettacolo";
String Newstr = regex_replace (str, regex ("^this | show $"), "cane");
cout << newStr << endl;
restituzione 0;

L'output è:

Il cane è per il cane

Il programma utilizza la funzione regex_replace (). Il primo argomento è la stringa target. Il secondo argomento è l'oggetto regex. Il terzo argomento è la stringa in sostituzione letterale. La stringa di ritorno è l'oggetto stringa modificato. Quindi la classe di stringhe doveva essere inclusa.

Taglio corretto

Considera la stringa:

"\ t voglio la democrazia! \N"

Due caratteri dello spazio bianco, '\ t' e ", sono di fronte al testo utile. Altri due caratteri dello spazio bianco, "e '\ t', sono dietro il testo utile. Il taglio significa rimuovere tutti i caratteri dello spazio bianco davanti al testo e rimuovere tutti i caratteri dello spazio bianco dietro il testo.

Per abbinare i primi due caratteri qui, il modello è “\ t | "Cioè, '\ t' o uno spazio. Per abbinare gli ultimi due caratteri qui, il modello è "| \ t", cioè uno spazio o '\ t'. Tuttavia, il programmatore di solito non sa cosa sia costituito un particolare spazio bianco. Quindi la cosa migliore da fare è tenere conto di tutte le possibili combinazioni per tutti i personaggi dello spazio bianco, con il modello ”| \ t | \ n | \ r | \ V | \ f". Nota l'uso del regex o dell'operatore, | .

C'è ancora un problema. Il modello ", | \ t | \ n | \ r | \ v | \ f" corrisponderebbe a un solo carattere di spazio bianco all'inizio della stringa e corrisponderebbe a un solo carattere di spazio bianco alla fine della stringa. Questo è dovuto al | operatori. Quindi, questo modello deve essere modificato per abbinare tutti i caratteri dello spazio bianco all'inizio della stringa o alla fine della stringa. Quindi ogni possibile personaggio deve essere abbinato zero o più volte della sintassi, x* . E il modello finale per abbinare i caratteri di spazi bianchi consecutivi è

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

Per abbinare i caratteri consecutivi dello spazio bianco all'inizio della stringa, usa,

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

Nota la presenza e la posizione di ^ .

Per abbinare i caratteri consecutivi dello spazio bianco alla fine della stringa, usa,

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

Nota la presenza e la posizione di $ . E per abbinare i caratteri consecutivi dello spazio bianco all'inizio o alla fine della stringa, usa,

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

Nota l'uso di | Nel mezzo del modello generale.

Dopo la corrispondenza, tutti i caratteri dello spazio bianco vengono sostituiti con nulla, cioè "", la stringa vuota. Ricorda che la funzione regex_replace () sostituisce tutte le occorrenze di sotto-corde abbinate al modello su tutta la stringa di destinazione.

Il seguente programma, taglia la stringa target, “\ t voglio la democrazia! \ n "a" Voglio la democrazia!":

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

char str [] = "\ t voglio democrazia! \N";
String retstr = regex_replace (str, regex ("^[| \ t | \ n | \ r | \ v | \ f]*| [| \ t | \ n | \ r | \ v | \ f]*$" ), "");
cout << retStr << endl;
restituzione 0;

L'output è:

Voglio la democrazia!

Conclusione

Tagliare una corda significa rimuovere gli spazi bianchi davanti e dietro la corda. Uno spazio bianco è composto da personaggi di spazio bianco. I caratteri dello spazio bianco sono ", '\ n', '\ r', 'f', '\ t" \ v'. Per tagliare una stringa in C ++, inclusa la libreria Regex, e utilizzare la funzione regex_replace () per cercare e sostituire. Sostituire qualsiasi spazio bianco all'inizio e/o alla fine della stringa con la stringa vuota.