Wie man Strings basierend auf dem Trennzeichen in C aufteilt

Wie man Strings basierend auf dem Trennzeichen in C aufteilt
String ist das Array von Zeichen und ein Grenzwert kann ein beliebiges Array von Zeichen oder ein beliebiges spezielles Zeichen sein, mit dem die Zeichenfolge in mehrere Substrings aufteilen kann. Der Trennzeichen wird Teil der String sein. Wir werden die Beispielimplementierung durchlaufen und auch einen C -Code implementieren, um die Zeichenfolge zu teilen.

String: String ist eine Reihe von Zeichen. Ein paar Beispiele für Saiten sind:

"Neu -Delhi ist die Hauptstadt Indiens"
"Bob studiert an der Stanford University"

Abgrenzer: Jeder Charakter oder Zeichen von Zeichen kann als Trennzeichen betrachtet werden. Wenn eine Zeichenfolge basierend auf dem Trennzeichen aufgeteilt werden soll, sollte der Graditer ein Teil der String sein oder die vollständige Zeichenfolge ist die Ausgabezeichenfolge.

Häufig verwendete Trennzeichenbeispiel.

Aufteilung der Zeichenfolge basierend auf dem Trennzeichen:

Betrachten wir eine Beispiel -Saite als „Fuchs lebt in Wäldern“ und ein Grenzwert als „(Raum), dann wird die Saite in mehrere Zeichenfolgen aufgeteilt. Mehrere Saiten nach Split werden "Fuchs" sein "lebt" in "" Woods ".

Jetzt sind wir uns also klar über das Konzept der Aufteilung und auch auf der Definition der Zeichenfolge und der Grenzwerterin sind wir jetzt klar. Lassen Sie uns mit der Untersuchung der Implementierung der Aufteilung in C fortfahren.

Standard -C -Funktion für Split basierend auf dem Trennzeichen:

C liefert die Strtok () Funktion, mit der die Zeichenfolge basierend auf dem ausgewählten Trennzeichen in Token aufgeteilt werden kann.

Funktionsprototyp:

char *strtok (char *einschränken str, const char *einschränken Grenz);

Header zum Aufnehmen:

#enthalten

C Programm zum Aufteilen der Zeichenfolge basierend auf dem Trennzeichen mit Strtok ():

#enthalten
#enthalten
int main ()

Char String [] = "Bob studiert an der Stanford University";
char *delim = "";
unsigned count = 0;
/* Erster Anruf bei Strtok sollte mit String und Grenzwert als erster und zweiter Parameter*/erfolgen
char *token = strtok (String, Delim);
zählen ++;
/* Konsekutive Anrufe zum Strtok sollten mit dem ersten Parameter als Null- und zweiter Parameter als Trennzeichen erfolgen
* * Der Rückgabewert des Strtoks ist die geteilte Zeichenfolge basierend auf dem Grenzwert */
während (Token != Null)

printf ("Token nein. %d: %s \ n ", count, token);
token = strtok (null, delim);
zählen ++;

Rückkehr 0;

C Programm -Schnappschuss:

Ausgabe des Programms:

Lassen Sie uns nun unsere eigene Implementierung diskutieren, um die Zeichenfolge auf der Basis von Trennzeichen zu teilen, ohne die Standard -C -Funktion (Strtok ()) zu verwenden.

Wir müssen die Trennzeichenpräsenz in der Zeichenfolge durchsuchen und die Adresse des ersten Zeichens des String -Tokens kurz vor dem Trennzeichen zurückgeben.

C Funktion zum Durchsuchen des auf dem Trennzeichens basierenden Token kann wie unten implementiert werden:

char *search_token (char *string, char *delim)

static char *remember = null;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (delim == null)
null zurückkehren;
if ((String == NULL) && (remember == null))
null zurückkehren;
if (string == null)
String = Erinnerung;
String_Length = Strlen (String) + 1;
für (i = 0; i
if (String [i] == Delim [0])

Search_hit = 1;
brechen;


if (search_hit != 1)

erinnere dich = null;
Return String;

String [i] = '\ 0';
if ((String+i+1) != Null)
erinnere = string + i + 1;
anders
erinnere dich = null;
Return String;

Oben ist die Suchfunktion, die nach dem Token suchen kann. Sobald Token Zeichen gefunden wird, bevor das Token kopiert und aus dem Quell -String -Puffer abgerufen werden kann.

Das vollständige C -Programm mit unserer Implementierung sieht nach unten aus:

#enthalten
#enthalten
char *search_token (char *string, char *delim)

static char *remember = null;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (delim == null)
null zurückkehren;
if ((String == NULL) && (remember == null))
null zurückkehren;
if (string == null)
String = Erinnerung;
String_Length = Strlen (String) + 1;
für (i = 0; i
if (String [i] == Delim [0])

Search_hit = 1;
brechen;


if (search_hit != 1)

erinnere dich = null;
Return String;

String [i] = '\ 0';
if ((String+i+1) != Null)
erinnere = string + i + 1;
anders
erinnere dich = null;
Return String;

int main ()

Char String [] = "Bob studiert an der Stanford University";
char *delim = "";
unsigned count = 0;
Char *Token;
printf ("full string = %s \ n", String);
/* Erster Anruf bei Search_toeKN sollte mit String und Gremiter als erster und zweiter Parameter*/erfolgen
token = search_token (String, delim);
// printf ("Token nein. %d: %s \ n ", count, token);
zählen ++;
/* Konsekutive Anrufe zum Strtok sollten mit dem ersten Parameter als Null- und zweiter Parameter als Trennzeichen erfolgen
* * Der Rückgabewert des Strtoks ist die geteilte Zeichenfolge basierend auf dem Grenzwert */
während (Token != Null)

printf ("Token nein. %d: %s \ n ", count, token);
token = search_token (null, delim);
zählen ++;

Rückkehr 0;

Ausgabe aus dem obigen Programm mit demselben Eingangssatz nach Standard -C -Strtok -Funktion:

Bash-4.2 $ ./A.aus
Full String = Bob studiert an der Stanford University
Token Nr. 1: Bob
Token Nr. 2: ist
Token Nr. 3: Studieren
Token Nr. 4: in
Token Nr. 5: Stanford
Token Nr. 6: Universität
Bash-4.2 $

Schnappschüsse des vollständigen Programms:

Snapshot Ausgabe:

Abschluss:

Bisher haben wir über die Aufteilung der Zeichenfolge besprochen, die auf dem Trennzeichen basiert. Es gibt bereits Möglichkeiten zur Bibliothek, dies zu tun. Die Bibliotheksfunktion, mit der die Zeichenfolge basierend auf dem Trennzeichen aufgeteilt werden kann, ist Strtok. Wir haben einen Beispiel verwendet, um die Bibliotheksfunktion Strtok zu verstehen. Außerdem haben wir ein Beispielprogramm geschrieben, um die Verwendung der Bibliotheksfunktion zu verstehen.

Zweiten Teil haben wir unsere eigene Methode zur Aufteilung der Zeichenfolge auf der Basis von Trennzeichen implementiert. Wir haben eine Funktion geschrieben, die wie C -Funktion Strtok ist. Erläuterung der Funktionsweise der benutzerdefinierten Funktion wurde mit Hilfe derselben Hauptfunktion bereitgestellt und demonstriert, die bei der C -Bibliotheksfunktion übernommen wurde. Die Beispielausgabe des Programms wird auch mit dem Beispielprogramm bereitgestellt.

Wir haben auch das Konzept der String -Split basierend auf dem Trennzeichen durchlaufen, nur um jedes Zeichen, das in der Hauptzeichenfolge ist. Sobald das Token gefunden wurde, wird die Zeichenfolge vor dem Token an die Anruferfunktion zurückgegeben.