C ++ nie ma funkcji, aby przyciąć ciąg. Istnieje przedmiot w programowaniu komputerowym o nazwie, wyrażenia regularne, skrócona Regex. Ten temat ma schematy, które umożliwiają programistę wyszukiwanie sub-drezy w ciągu docelowego i zastępować znaleziono podstęp. Znaleziono substring można zastąpić niczym, a więc wymazując.
Do przycięcia ciąg. Więc poszukaj wszystkich postaci z białej przestrzeni przed sznurkiem i wszystkimi postaciami z białej przestrzeni za sznurkiem i wymień je na nic. Na szczęście C ++ ma bibliotekę Regex, która musi być uwzględniona w programie, aby to zrobić.
Treść artykułu
Podsumowanie wyrażeń regularnych
Regex
Rozważ ciąg:
„To jest dla programu”
Pierwsze cztery znaki tego ciągu tworzą pod strinę „To”. Ostatnie cztery znaki ciągu tworzą ostatnie pod stratę, „Pokaż”.
Teraz cały ciąg jest nazywany ciągiem docelowym lub po prostu docelowym. Podpisanie „To” lub „show” nazywa się wyrażeniem regularnym lub po prostu, Regex.
Dopasowanie
Jeśli „to” jest przeszukiwane i znajduje się w celu, mówi się, że dopasowanie miało miejsce. Jeśli „show” jest przeszukiwane i znajdujące się, wówczas mówi się, że dopasowanie się wydarzyło. Dopasowanie występuje dla dowolnego ciągu docelowego, gdy znaleziono substring. String można wymienić. Na przykład „to” można zastąpić „tutaj” i „show” można zastąpić „grę”, aby mieć nowy cel,
„Oto gra”
Gdyby pierwsze i ostatnie słowa wcale nie były poszukiwane, można je zastąpić niczym, aby mieć,
„Czy to dla”
Ten ostatni wynik zdarza się niekonwencjonalne przycinanie, które niestety wciąż kończy się jedną przestrzenią na początku, a na końcu kolejne miejsce.
Wzór
Tępe podtrepanie („to” lub „show”), jak pokazano powyżej, jest prostym wzorem. Rozważ następujący cel:
„Hej, to nietoperz na środku drogi."
Programista może chcieć wiedzieć, czy jest to szczur, kot czy nietoperz, ponieważ te trzy słowa są podobne w dźwięku. Potrzebuje wzoru, aby zidentyfikować słowo „kot” lub „szczur” lub „nietoperz”. Zauważ, że każde z tych słów kończy się „at”, ale zaczyna się od „b” lub „c” lub „r”. Wzór, który pasuje do jednego z tych trzech słów, jest
[bcr] w
Oznacza to, że dopasuj „b” lub „c” lub „r”, a następnie „AT”.
Powtórzenie
x*: oznacza dopasowanie „x '0 lub więcej razy, i.mi., dowolna liczba razy.
Pasujące przykłady
Poniższy program daje dopasowanie „BAT” w ciągu docelowego, używając obiektu Regex, Reg („[BCR] at”), którego wzór jest [BCR] AT.
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
Regex Reg („[BCR] at”);
if (Regex_search („Hej, to nietoperz na środku drogi.", reg))
Cout << "matched" << endl;
w przeciwnym razie
Cout << "not matched" << endl;
powrót 0;
Wyjście jest: dopasowane.
Biblioteka Regex jest dołączona do „#Include”. Obiekt Regex jest utworzony instancją z instrukcją,
Regex Reg („[BCR] at”);
[/cc]
Funkcja Regex_Search () z biblioteki bierze tutaj dwa argumenty. Pierwszy to ciąg docelowy. Drugi to obiekt Regex. Wzór, [BCR] w dopasowanym „nietopecie”, a więc funkcja Regex_search () zwróciła true. W przeciwnym razie powróciłby, fałsz.
Poniższy program ilustruje dopasowanie wzoru, Bo*K dla „Book”:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
Regex Reg („Bo*k”);
if (Regex_search („Książka jest dobra.", reg))
Cout << "matched" << endl;
w przeciwnym razie
Cout << "not matched" << endl;
powrót 0;
Wyjście jest: dopasowane. o* oznacza, dopasuj „O”, zero lub więcej razy. W rzeczywistości pasowało do „O”, dwa razy w „książce”.
Dopasowywanie początkowego ciągu docelowego
Aby dopasować początek łańcucha docelowego, wzór ma na początek ^ . Poniższy program pasuje do „To” na początku docelowego ciągu „To jest to dla programu”.
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
Regex reg („^this”);
if (regex_search („to jest to dla show”, reg))
Cout << "matched" << endl;
w przeciwnym razie
Cout << "not matched" << endl;
powrót 0;
Wyjście jest: dopasowane. Zwróć uwagę na literał Regex, „^to” .
Dopasowanie końca ciągów docelowych
Aby dopasować koniec łańcucha docelowego, wzór musi zakończyć się $. Poniższy program pasuje do „Pokaż” na końcu docelowego ciągu „To jest to dla programu”.
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
Regex Reg („show $”);
if (regex_search („to jest to dla show”, reg))
Cout << "matched" << endl;
w przeciwnym razie
Cout << "not matched" << endl;
powrót 0;
Wyjście jest: dopasowane. Zwróć uwagę na literał Regex „Show $” .
Dopasowanie alternatyw
Aby dopasować początkowe podtreparowanie lub końcowe substrowanie, | Meta-znak musi oddzielić wzorce początkowe i końcowe w ogólnym wzorze. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
Regex reg („^this | show $”);
if (regex_search („to jest to dla show”, reg))
Cout << "matched" << endl;
w przeciwnym razie
Cout << "not matched" << endl;
powrót 0;
Wyjście jest: dopasowane. Zwróć uwagę na literał Regex, „^This | show $” .
Teraz funkcja Regex_Search () zazwyczaj odpowiada pierwszej opcji wzoru i zatrzymuje się. Ta sprawa pasuje do „tego” na początku celu i zatrzymuje się bez dalszego dopasowania „Show” na końcu celu.
Na szczęście funkcja Regex_replace () biblioteki Regex C ++ zastępuje wszystkie alternatywy w dowolnym miejscu w ciągu docelowego ciągu w trybie domyślnym. I tak, ta funkcja Regex_replace () nadaje się do przycinania ciągów. To znaczy, poszukaj całkowitej białej przestrzeni przed sznurkiem i poszukaj całkowitej białej przestrzeni za sznurkiem i wymień oba.
Wyszukaj i wymień
Poniższy program zastępuje pierwsze i ostatnie słowa, docelowego ciągu, słowem „pies”:
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
char str [] = "to jest to dla show";
String Newstr = Regex_replace (str, Regex („^this | show $”), „pies”);
Cout << newStr << endl;
powrót 0;
Wyjście to:
Pies to dla psa
Program korzysta z funkcji Regex_replace (). Pierwszym argumentem jest ciąg docelowy. Drugim argumentem jest obiekt Regex. Trzecim argumentem jest zastępujący literał struny. Ciąg powrotny to zmodyfikowany obiekt ciągów. Więc klasa stringowa musiała być uwzględniona.
Pęd właściwy
Rozważ ciąg:
"\ t chcę demokracji! \N"
Dwa znaki białych przestrzeni, „\ t” i ", są przed użytecznym tekstem. Kolejne dwa postacie z białej przestrzeni, „i„ \ t ”, stoją za użytecznym tekstem. Przycinanie oznacza usunięcie wszystkich znaków białej przestrzeni przed tekstem i usunięcie wszystkich postaci z białej przestrzeni za tekstem.
Aby dopasować dwa pierwsze postacie tutaj, wzór to „\ t | „To znaczy„ \ t ”lub jedno miejsce. Aby dopasować dwa ostatnie postacie tutaj, wzór to „| \ t”, to znaczy jedno miejsce lub „\ t”. Jednak programista zwykle nie wie, z czego składa się konkretna biała przestrzeń. Najlepszą rzeczą jest uwzględnienie wszystkich możliwych kombinacji dla wszystkich znaków białej przestrzeni, z wzorem, ”| \ t | \ n | \ r | \ v | \ f”. Zwróć uwagę na użycie Regex lub operatora, | .
Nadal jest problem. Wzór, „| \ t | \ n | \ r | \ v | \ f” pasowałby tylko do jednej postaci białej przestrzeni na początku ciągu i pasowałby tylko do jednej postaci białej przestrzeni na końcu ciągu. To z powodu | operatorzy. Tak więc ten wzór należy zmodyfikować, aby pasował do wszystkich znaków białej przestrzeni na początku ciągu lub na końcu ciągu. Tak więc każdy możliwy charakter musi być dopasowany zero lub więcej razy składni, x* . A ostatecznym wzorem pasującym do kolejnych postaci z białej listy są
"[| \ t | \ n | \ r | \ v | \ f]*"
Aby dopasować kolejne znaki białej przestrzeni na początku ciągu, użyj,
"^[| \ t | \ n | \ r | \ v | \ f]*"
Zwróć uwagę na obecność i pozycję ^ .
Aby dopasować kolejne znaki białej przestrzeni na końcu ciągów, użyj,
"[| \ t | \ n | \ r | \ v | \ f]*$"
Zwróć uwagę na obecność i pozycję $ . I dopasować kolejne znaki białej przestrzeni na początku lub na końcu łańcucha, użyj,
"^[| \ t | \ n | \ r | \ v | \ f]*| [| \ t | \ n | \ r | \ v | \ f]*$"
Zwróć uwagę na użycie | W środku ogólnego wzoru.
Po dopasowaniu wszystkie postacie z białej przestrzeni są zastępowane niczym, to znaczy „”, pusty ciąg. Pamiętaj, że funkcja Regex_replace () zastępuje wszystkie wystąpienia podprinów dopasowane do wzoru w ciągu docelowego ciągu.
Poniższy program przycina ciąg docelowy: „\ T Chcę demokracji! \ n ”do„ Chcę demokracji!”:
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
char str [] = "\ t chcę demokrację! \N";
String retstr = Regex_replace (str, Regex ("^[| \ t | \ n | \ r | \ v | \ f]*| [| \ t | \ n | \ r | \ v | \ f]*$" ), „”);
Cout << retStr << endl;
powrót 0;
Wyjście to:
Chcę demokracji!
Wniosek
Przycinanie sznurka oznacza usunięcie białych przestrzeni z przodu i za sznurkiem. Biała przestrzeń składa się z postaci białej przestrzeni. Postacie białej przestrzeni to „,„ \ n ”,„ \ r ”,„ f ”, '\ t" \ v' '. Aby przyciąć ciąg w C ++, w tym biblioteka Regex i użyj funkcji Regex_replace (), aby wyszukiwać i wymienić. Wymień dowolną białą przestrzeń na początku i/lub na końcu sznurka na pusty ciąg.