Jak podzielić ciągi na podstawie ogranicznika w C

Jak podzielić ciągi na podstawie ogranicznika w C
String jest szeregiem znaków, a ogranicznik może być dowolną gamą znaków lub dowolnego znaku specjalnego, którego można użyć do podziału ciągów na wiele podkładów. SYMITER będzie częścią ciągów. Przejdziemy do przykładowej implementacji i zaimplementujemy również część kodu C, aby podzielić ciąg.

Strunowy: String to szereg znaków. Kilka przykładów strun to:

„New Delhi jest stolicą Indii”
„Bob uczy się na Uniwersytecie Stanforda”

SYMITER: Każda postać lub zestaw znaków można uznać za ogranicznik. Jeśli ciąg ma zostać podzielony na podstawie ogranicznika, wówczas delimiter powinien być częścią ciągu, w przeciwnym razie pełny ciąg będzie ciągiem wyjściowym.

Powszechnie używane przykłady ograniczające są: „(przestrzeń) ,, (przecinek),„ \ n ”(nowa linia) i wiele innych.

Podzielanie łańcucha na podstawie delimiter:

Rozważmy przykładowy ciąg jako „Fox żyje w lesie” i ograniczając jako „” (przestrzeń), wówczas ciąg podzielony na wiele strun. Wiele sznurków po splicie to „lis” „żyje” „w” „Woods”.

Więc teraz jesteśmy jasni na temat pojęcia podziału, a także jesteśmy teraz jasni na definicji String and Delimiter. Kontynuujmy badanie wdrażania podziału w C.

Standardowa funkcja C dla podziału w oparciu o ogranicznik:

C zapewnia strtok () funkcja, która może być użyta do podziału łańcucha na tokeny na podstawie wybranego ogranicznika.

Prototyp funkcji:

char *strtok (char *ogranicz str, const char *ogranicz DeliM);

Nagłówek do uwzględnienia:

#włączać

Program c do podziału ciągu na podstawie delimiter za pomocą strtok ():

#włączać
#włączać
int main ()

Char String [] = "Bob studiuje na Uniwersytecie Stanforda";
char *deliM = "";
niepodpisana liczba = 0;
/* Pierwsze wywołanie Strtok powinno być wykonane z ciągiem i ogranicznikiem jako pierwszy i drugi parametr*/
char *token = strtok (string, deni);
count ++;
/* Kolejne połączenia ze strTOK powinny mieć pierwszy parametr jako null i drugi parametr jako ogranicznik
* * Wartość zwracana StrTok będzie podzielonym ciągiem na podstawie delimiter */
podczas gdy (token != Null)

printf ("token no. %d: %s \ n ”, liczba, token);
token = strtok (null, deni);
count ++;

powrót 0;

C Migawka programu:

Wyjście programu:

Omówmy teraz naszą własną implementację do podzielonego ciągu na podstawie delimiter bez użycia standardowej funkcji C (strtok ()).

Musimy przeszukać obecność ogranicznika w ciągu i możemy zwrócić adres pierwszego znaku tokenu ciągów tuż przed ograniczeniem.

C Funkcja wyszukiwania tokena na podstawie ograniczenia można zaimplementować, jak poniżej:

char *Search_Token (Char *String, Char *DeLim)

static char *pamiętaj = null;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (DeLim == NULL)
powrót NULL;
if ((string == null) && (pamiętaj == null))
powrót NULL;
if (string == null)
String = pamiętaj;
string_length = strlen (string) + 1;
dla (i = 0; i
if (String [i] == DeliM [0])

Search_hit = 1;
przerwa;


if (Search_hit != 1)

Pamiętaj = null;
ciąg return;

String [i] = '\ 0';
if ((string+i+1) != Null)
Remember = String + i + 1;
w przeciwnym razie
Pamiętaj = null;
ciąg return;

Powyżej znajduje się funkcja wyszukiwania w celu wyszukiwania tokena, kiedy token zostanie znaleziony znak, zanim token można skopiować i pobierać z bufora strun źródłowego.

Kompletny program C z naszą implementacją będzie wyglądał poniżej:

#włączać
#włączać
char *Search_Token (Char *String, Char *DeLim)

static char *pamiętaj = null;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (DeLim == NULL)
powrót NULL;
if ((string == null) && (pamiętaj == null))
powrót NULL;
if (string == null)
String = pamiętaj;
string_length = strlen (string) + 1;
dla (i = 0; i
if (String [i] == DeliM [0])

Search_hit = 1;
przerwa;


if (Search_hit != 1)

Pamiętaj = null;
ciąg return;

String [i] = '\ 0';
if ((string+i+1) != Null)
Remember = String + i + 1;
w przeciwnym razie
Pamiętaj = null;
ciąg return;

int main ()

Char String [] = "Bob studiuje na Uniwersytecie Stanforda";
char *deliM = "";
niepodpisana liczba = 0;
Char *Token;
printf („pełny string = %s \ n”, string);
/* Pierwsze wywołanie do wyszukiwania_toekn powinno być wykonane z ciągiem i delimiter jako pierwszy i drugi parametr*/
token = Search_Token (String, DeLim);
// printf ("token nr. %d: %s \ n ”, liczba, token);
count ++;
/* Kolejne połączenia ze strTOK powinny mieć pierwszy parametr jako null i drugi parametr jako ogranicznik
* * Wartość zwracana StrTok będzie podzielonym ciągiem na podstawie delimiter */
podczas gdy (token != Null)

printf ("token no. %d: %s \ n ”, liczba, token);
token = Search_Token (NULL, DeLim);
count ++;

powrót 0;

Wyjście z powyższego programu z tym samym zestawem wejściowym co standardowa funkcja C Strtok:

Bash-4.2 $ ./A.na zewnątrz
Full String = Bob uczy się na Uniwersytecie Stanforda
Token nr. 1: Bob
Token nr. 2: jest
Token nr. 3: Studiowanie
Token nr. 4: In
Token nr. 5: Stanford
Token nr. 6: Uniwersytet
Bash-4.2 $

Migawki pełnego programu:

Migawka wyjściowa:

Wniosek:

Do tej pory omówiliśmy o podzieleniu łańcucha na podstawie ogranicznika. Istnieją już dostępne biblioteki. Funkcją biblioteki, której można użyć do podziału ciągów na podstawie ograniczenia, jest strtok. Wzięliśmy przykładowy przypadek użycia, aby zrozumieć funkcję biblioteki strtok. Napisaliśmy także przykładowy program, aby zrozumieć użycie funkcji biblioteki.

Druga część, zaimplementowaliśmy własną metodę podziału łańcucha na podstawie delimiter. Napisaliśmy funkcję, która jest jak c funkcja strtok. Wyjaśnienie funkcjonowania funkcji niestandardowej podano i wykazano za pomocą tej samej głównej funkcji, którą podjęto w przypadku funkcji biblioteki C. Przykładowy wynik programu jest również dostarczany z przykładowym programem.

Przeszliśmy także koncepcję podziału ciągów w oparciu o ograniczenie, po prostu podsumowanie dowolnego znaku, który jest wyszukiwaniem w głównym ciągu, można uznać za token i można go przeszukać, dopóki token nie zostanie napotkany. Po znalezieniu tokena string przed powrót tokena do funkcji dzwoniącego.