Come dividere le stringhe basate sul delimitatore in C

Come dividere le stringhe basate sul delimitatore in C
La stringa è l'array di caratteri e delimitatore può essere qualsiasi array di caratteri o qualsiasi carattere speciale, che può essere utilizzato per dividere la stringa in più substrings. Delimitatore farà parte della stringa. Esamineremo l'implementazione di esempio e implementeremo anche un pezzo di codice C per dividere la stringa.

Corda: La stringa è una matrice di caratteri. Un paio di esempi di stringhe sono:

"Nuova Delhi è capitale dell'India"
"Bob sta studiando all'Università di Stanford"

Delimitatore: Qualsiasi personaggio o set di caratteri può essere considerato delimitatore. Se una stringa deve essere divisa in base al delimitatore, il delimitatore dovrebbe far parte della stringa oppure la stringa completa sarà la stringa di output.

Esempi delimitanti comunemente usati sono: ““ (spazio) ,, (virgola), '\ n' (nuova riga) e molti altri.

Dividere la stringa in base al delimitatore:

Consideriamo una stringa di esempio come "Fox vive in Woods" e delimitatore come "" (spazio), quindi la stringa si divide in più stringhe. Stringhe multiple dopo la divisione saranno "volpi" "vite" "in" "boschi".

Quindi ora siamo chiari sul concetto di scissione e anche, ora siamo chiari sulla stringa e sulla definizione delimitante. Procediamo con l'esplorazione dell'implementazione della divisione in C.

Funzione C standard per diviso in base al delimitatore:

C fornisce il strtok () funzione, che può essere utilizzata per dividere la stringa in token in base al delimitatore selezionato.

Prototipo di funzione:

char *strtok (char *limitare str, const char *limitare Delim);

Intestazione da includere:

#includere

Programma C per dividere la stringa in base al delimitatore usando strtok ():

#includere
#includere
int main ()

Char String [] = "Bob sta studiando all'Università di Stanford";
char *delim = "";
conteggio non firmato = 0;
/* La prima chiamata a Strtok dovrebbe essere eseguita con stringa e delimitatore come primo e secondo parametro*/
char *token = strtok (string, delim);
conta ++;
/* Le chiamate consecutive a Strtok dovrebbero essere con il primo parametro come null e secondo parametro come delimitatore
* * Il valore di ritorno di Strtok sarà la stringa divisa in base al delimitatore */
mentre (token != Null)

printf ("token no. %d: %s \ n ", conte, token);
token = strtok (null, delim);
conta ++;

restituzione 0;

C -istantanea del programma:

Output del programma:

Ora, discutiamo della nostra implementazione per dividere la stringa in base al delimitatore senza utilizzare la funzione C standard (STRTOK ()).

Dobbiamo cercare la presenza delimitatore nella stringa e possiamo restituire l'indirizzo del primo carattere del token di stringa appena prima del delimitatore.

La funzione C per cercare il token in base al delimitatore può essere implementata come di seguito:

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

char char *ricorda = null;
int String_Length = 0;
int i = 0;
int search_hit = 0;
if (delim == null)
restituire null;
if ((string == null) && (ricorda == null))
restituire null;
if (string == null)
string = ricorda;
String_Length = Strlen (String) + 1;
per (i = 0; i
if (string [i] == delim [0])

Search_hit = 1;
rottura;


if (Search_hit != 1)

ricorda = null;
restituire stringa;

string [i] = '\ 0';
if ((stringa+i+1) != Null)
Ricorda = String + i + 1;
altro
ricorda = null;
restituire stringa;

Sopra è la funzione di ricerca per cercare il token, una volta che il token si trova il carattere prima che il token possa essere copiato e recuperato dal buffer della stringa di origine.

Il programma C completo con la nostra implementazione apparirà di seguito:

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

char char *ricorda = null;
int String_Length = 0;
int i = 0;
int search_hit = 0;
if (delim == null)
restituire null;
if ((string == null) && (ricorda == null))
restituire null;
if (string == null)
string = ricorda;
String_Length = Strlen (String) + 1;
per (i = 0; i
if (string [i] == delim [0])

Search_hit = 1;
rottura;


if (Search_hit != 1)

ricorda = null;
restituire stringa;

string [i] = '\ 0';
if ((stringa+i+1) != Null)
Ricorda = String + i + 1;
altro
ricorda = null;
restituire stringa;

int main ()

Char String [] = "Bob sta studiando all'Università di Stanford";
char *delim = "";
conteggio non firmato = 0;
char *token;
printf ("full string = %s \ n", string);
/* La prima chiamata a Search_toekn deve essere eseguita con stringa e delimitatore come primo e secondo parametro*/
token = search_token (string, delim);
// printf ("token no. %d: %s \ n ", conte, token);
conta ++;
/* Le chiamate consecutive a Strtok dovrebbero essere con il primo parametro come null e secondo parametro come delimitatore
* * Il valore di ritorno di Strtok sarà la stringa divisa in base al delimitatore */
mentre (token != Null)

printf ("token no. %d: %s \ n ", conte, token);
token = search_token (null, delim);
conta ++;

restituzione 0;

Output dal programma sopra con lo stesso set di input della funzione standard c strtok:

Bash-4.2 $ ./UN.fuori
Full String = Bob sta studiando alla Stanford University
Token n. 1: Bob
Token n. 2: è
Token n. 3: studiare
Token n. 4: in
Token n. 5: Stanford
Token n. 6: Università
Bash-4.2 $

Snapshot del programma completo:

Snapshot di output:

Conclusione:

Finora abbiamo discusso della divisione della stringa in base al delimitatore. Esistono già modi di biblioteca disponibili per farlo. La funzione della libreria che può essere utilizzata per dividere la stringa in base al delimitatore è STRTOK. Abbiamo preso un caso d'uso di esempio per comprendere la funzione della libreria strtok. Inoltre, abbiamo scritto un programma di esempio per comprendere l'uso della funzione della libreria.

Seconda parte, abbiamo implementato il nostro metodo per dividere la stringa in base al delimitatore. Abbiamo scritto una funzione che è come la funzione c strtok. La spiegazione del funzionamento della funzione personalizzata è stata fornita e dimostrata con l'aiuto della stessa funzione principale che è stata presa in caso di funzione della libreria C. L'output di esempio del programma è anche fornito con il programma di esempio.

Abbiamo anche superato il concetto di split di stringhe in base al delimitatore, solo per riassumere qualsiasi personaggio che sia la ricerca nella stringa principale può essere considerato come un token e può essere perquisito fino a quando non si incontra il token. Una volta trovato il token, stringa prima che il token venga restituito alla funzione del chiamante.