Como dividir as cordas com base no delimitador em C

Como dividir as cordas com base no delimitador em C
String é a matriz de caracteres e delimitador pode ser qualquer matriz de caracteres ou qualquer personagem especial, que pode ser usado para dividir a string em várias substringas. Delimitador fará parte da corda. Vamos passar pela implementação de exemplo e também implementaremos algum código C para dividir a string.

Corda: String é uma variedade de personagens. Alguns exemplos de cordas são:

“Nova Délhi é a capital da Índia”
“Bob está estudando na Universidade de Stanford”

Delimitador: Qualquer personagem ou conjunto de caracteres pode ser considerado como delimitador. Se uma string for dividida com base no delimitador, o delimitador deve fazer parte da string ou senão string completa será a sequência de saída.

Os exemplos de delimiter comumente usados ​​são: ““ (Espaço) ,, (vírgula), '\ n' (nova linha) e muito mais.

Dividindo a string com base no delimitador:

Vamos considerar um exemplo de string como "Fox vive em bosques" e delimitador como "" (espaço), então a corda se dividirá em várias strings. Múltiplas cordas após a divisão serão "Fox" "vidas" "em" "bosques".

Então agora, estamos claros sobre o conceito de divisão e também estamos claros agora na definição de corda e delimitador. Vamos prosseguir com a exploração da implementação da divisão em C.

Função padrão C para dividir com base no delimitador:

C fornece o strtok () função, que pode ser usada para dividir a string em tokens com base no delimitador selecionado.

Prototipo de função:

char *strtok (char *restrito str, const char *restringir Delim);

Cabeçalho a ser incluído:

#incluir

C Programa para dividir a string com base no delimitador usando strtok ():

#incluir
#incluir
int main ()

Char String [] = "Bob está estudando na Universidade de Stanford";
char *delim = "";
contagem não assinada = 0;
/* A primeira chamada para Strtok deve ser feita com string e delimitador como primeiro e segundo parâmetro*/
char *token = strtok (string, delim);
contagem ++;
/* Chamadas consecutivas para o strtok devem estar com o primeiro parâmetro como nulo e segundo parâmetro como delimitador
* * O valor de retorno do strtok será a sequência dividida com base no delimitador */
enquanto (token != Nulo)

printf ("Token não. %d: %s \ n ", conde, token);
token = strtok (nulo, delim);
contagem ++;

retornar 0;

C Snapshot do programa:

Saída do programa:

Agora, vamos discutir nossa própria implementação para dividir a string com base no delimitador sem usar a função C padrão (strtok ()).

Devemos procurar a presença do delimitador na string e retornar o endereço do primeiro caractere do token da string pouco antes do delimitador.

C Função para pesquisar o token com base no delimitador pode ser implementado como abaixo:

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

char estático *lembre -se = nulo;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (delim == null)
retornar nulo;
if ((string == null) && (lembre -se == null))
retornar nulo;
if (string == null)
string = lembre -se;
string_length = strlen (string) + 1;
para (i = 0; i
if (string [i] == delim [0])

Search_hit = 1;
quebrar;


if (search_hit != 1)

lembre -se = nulo;
retornar string;

string [i] = '\ 0';
if ((string+i+1) != Nulo)
lembre -se = string + i + 1;
outro
lembre -se = nulo;
retornar string;

Acima está a função de pesquisa para procurar o token, uma vez que o token é encontrado caráter antes que o token possa ser copiado e buscado no buffer de string de origem.

O programa C completo com nossa implementação será abaixo:

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

char estático *lembre -se = nulo;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (delim == null)
retornar nulo;
if ((string == null) && (lembre -se == null))
retornar nulo;
if (string == null)
string = lembre -se;
string_length = strlen (string) + 1;
para (i = 0; i
if (string [i] == delim [0])

Search_hit = 1;
quebrar;


if (search_hit != 1)

lembre -se = nulo;
retornar string;

string [i] = '\ 0';
if ((string+i+1) != Nulo)
lembre -se = string + i + 1;
outro
lembre -se = nulo;
retornar string;

int main ()

Char String [] = "Bob está estudando na Universidade de Stanford";
char *delim = "";
contagem não assinada = 0;
char *token;
printf ("Full string = %s \ n", string);
/* Primeira chamada para search_toekn deve ser feita com string e delimitador como primeiro e segundo parâmetro*/
token = search_token (string, delim);
// printf ("Token não. %d: %s \ n ", conde, token);
contagem ++;
/* Chamadas consecutivas para o strtok devem estar com o primeiro parâmetro como nulo e segundo parâmetro como delimitador
* * O valor de retorno do strtok será a sequência dividida com base no delimitador */
enquanto (token != Nulo)

printf ("Token não. %d: %s \ n ", conde, token);
token = search_token (nulo, delim);
contagem ++;

retornar 0;

Saída do programa acima com o mesmo conjunto de entradas na função c strtok padrão:

Bash-4.2 $ ./a.fora
Full String = Bob está estudando na Universidade de Stanford
Token Não. 1: Bob
Token Não. 2: IS
Token Não. 3: Estudando
Token Não. 4: IN
Token Não. 5: Stanford
Token Não. 6: Universidade
Bash-4.2 $

Instantâneos do programa completo:

Snapshot de saída:

Conclusão:

Até agora, discutimos sobre a divisão da string com base no delimitador. Já existem maneiras de biblioteca disponíveis para fazer isso. A função da biblioteca que pode ser usada para dividir a string baseada no delimitador é strtok. Tomamos um exemplo de caso de uso para entender a função da biblioteca strtok. Além disso, escrevemos um programa de exemplo para entender o uso da função da biblioteca.

Segunda parte, implementamos nosso próprio método de dividir a string baseada no delimitador. Escrevemos uma função que é como C função strtok. A explicação do funcionamento da função personalizada foi fornecida e demonstrada com a ajuda da mesma função principal que foi tirada no caso da função da biblioteca C. Exemplo de saída do programa também é fornecido com o programa de exemplo.

Também passamos pelo conceito de divisão de cordas com base no delimitador, apenas para resumir qualquer personagem que seja pesquisado na string principal pode ser considerado como um token e pode ser pesquisado até que o token seja encontrado. Depois que o token é encontrado, a string antes do token é devolvida à função de chamadas.