Programação C

Programação C de comparação de strings

Programação C de comparação de strings
Uma string na linguagem C é uma matriz de caracteres, que termina com um caractere nulo (\ 0). Usando esta propriedade, as strings são comparadas.

Duas strings podem ser comparadas de várias maneiras. Neste tutorial, primeiro, veremos uma função definida pelo usuário para comparar duas strings e, em seguida, veremos algumas funções de biblioteca integradas que podem ser usadas para comparar duas strings muito facilmente. Então vamos começar.

Comparação de strings usando uma função definida pelo usuário:

Vamos escrever uma função stringCompare () comparar strings. Nós percorremos as strings e comparamos cada caractere da string até chegarmos ao final de qualquer um ou ambos ou uma incompatibilidade seja encontrada. Se a travessia for alcançada até o final de ambas as strings, as strings serão combinadas; caso contrário, as strings são incompatíveis.

01. / * userDefinedFunction.c * /
02.
03. #incluir
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. enquanto (str1 [i] == str2 [i])
10.
11. if (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. pausa;
13. i ++;
14.
15.
16. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. return 0;
18. senão
19. return -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Digite a primeira string:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Digite a segunda string:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. if (stringCompare (str1, str2) == 0)
34. printf ("As strings são iguais \ n");
35. senão
36. printf ("As strings não são iguais \ n");
37.
38. return 0; 39.

Aqui, percorremos as strings usando o loop while e uma variável eu. Quando os caracteres são iguais na mesma posição de ambas as strings, o valor de eu é incrementado em 1 (linha 13). Se os caracteres não forem iguais (linha 09) ou chegarmos ao final da string (linha 11), o loop while é uma pausa. Após o loop while, verificamos se as travessias da string foram alcançadas ou não (linha 16). Se a travessia for alcançada ao final de ambas as strings, as strings são iguais, caso contrário, não.

Comparação de strings usando funções de biblioteca integradas:

As seguintes funções de biblioteca podem ser usadas para comparação de strings. Todas as funções são declaradas no fragmento.h arquivo de cabeçalho.

função strcmp ():

Esta função compara duas strings passadas para a função.

Sintaxe:

int strcmp (const char * str1, const char * strcmp)

Valor de retorno: Retorne 0 se as strings forem iguais. Retorna um número inteiro negativo se o valor ASCII do primeiro caractere sem correspondência da primeira string for menor que a segunda string. Retorna um número inteiro positivo se o valor ASCII do primeiro caractere sem correspondência da primeira string for maior que a segunda string. Alguns sistemas retornam a diferença do valor ASCII do primeiro caractere incompatível e alguns sistemas retornam -1 se o valor ASCII do primeiro caractere incompatível da primeira string for menor que a segunda string e retornam 1 se o valor ASCII do primeiro caractere não correspondido a primeira corda é maior que a segunda corda.

Exemplo Valor de retorno Explicação
strcmp ( “Hello World”, ”Hello World” ) 0 Duas cordas são iguais.
strcmp ( “Hello”, ”Hello \ 0 World” ) 0 Strings são comparados até o caractere '\ 0'. A primeira string, por padrão, termina com '\ 0', e a segunda string contém o caractere '\ 0' após 'Hello'.
strcmp ( “Olá \ 0 \ 0 \ 0", ”Olá \ 0 Mundo” ) 0 Strings são comparados até o caractere '\ 0'.
strcmp ( “Hello World”, ”hello World” ) Inteiro negativo O valor ASCII do primeiro caractere sem correspondência da primeira string ('H') é ​​menor que a segunda string ('h')
strcmp (“Hello World”, ”Hello World” ) Inteiro positivo O valor ASCII do primeiro caractere sem correspondência da primeira string ('h') é maior que a segunda string ('H')

função strncmp ():

Esta função é semelhante à função strcmp (), mas aqui temos que especificar quantos bytes são comparados passando um argumento extra para a função.

Sintaxe:

int strncmp (const char * str1, const char * str2, size_t n)

Valor de retorno: A função retorna 0 se o primeiro n os caracteres das duas strings são iguais; caso contrário, retorna um número inteiro negativo ou positivo dependendo do sinal das diferenças entre o valor ASCII do primeiro caractere incompatível.

Exemplo Valor de retorno Explicação
strncmp ( “Hello World”, ”Hello World”, 5 ) 0 Os 5 primeiros caracteres são iguais.
strncmp ( “Hello”, ”Hello \ 0 World”, 5 ) 0 Os 5 primeiros caracteres são iguais.
strncmp ( “Hello \ 0 \ 0 \ 0", ”Hello \ 0 World”, 8 ) 0 '\ 0' está após os primeiros 5 caracteres em ambas as strings. Então, a comparação é interrompida após 5, não 8.
strncmp ( “Hello World”, ”hello World”, 5 ) Inteiro negativo O valor ASCII do primeiro caractere sem correspondência da primeira string ('H') é ​​menor que a segunda string ('h')

função strcasecmp ():

Esta função é semelhante à função strcmp (), mas aqui as strings não diferenciam maiúsculas de minúsculas.

Sintaxe:

int strcasecmp (const char * str1, const char * str2)

Valor de retorno: Igual a strcmp (), mas as strings são tratadas como sensível a maiúsculas e minúsculas.

Exemplo Valor de retorno Explicação
strcasecmp ( “Hello World”, ”Hello World” ) 0 Duas cordas são iguais.
strcasecmp ( “Hello”, ”Hello \ 0 World” ) 0 Strings são comparados até o caractere '\ 0'. A primeira string, por padrão, termina com '\ 0', e a segunda string contém o caractere '\ 0' após 'Hello'.
strcasecmp ( “Hello World”, ”hello World” ) 0 Strings são sensível a maiúsculas e minúsculas. Então, “Hello World” e “hello World” são o mesmo.

função strncasecmp ():

Esta função é semelhante à função strncmp (), mas aqui as strings não diferenciam maiúsculas de minúsculas.

Sintaxe:

int strncasecmp (const char * str1, const char * str2)

Valor de retorno: Igual a strncmp (), quando as strings são tratadas como diferenciando maiúsculas de minúsculas.

Exemplo Valor de retorno Explicação
strncasecmp ( “Hello World”, ”Hello World”, 5 ) 0 Os 5 primeiros caracteres são iguais.
strncasecmp ( “Hello”, ”Hello \ 0 World”, 5 ) 0 Os 5 primeiros caracteres são iguais.
strncasecmp ( “Hello \ 0 \ 0 \ 0", ”Hello \ 0 World”, 8 ) 0 '\ 0' está após os primeiros 5 caracteres em ambas as strings. Então, a comparação é interrompida após 5, não 8.
strncasecmp ( “Hello World”, ”hello World”, 5 ) 0 Strings são sensível a maiúsculas e minúsculas. Então, “Olá” e “Olá” são iguais.

função memcmp ():

Esta função compara dois blocos de memória byte a byte. Temos que passar dois ponteiros dos blocos de memória e o número de bytes para comparar.

Sintaxe:

int memcmp (const void * str1, const void * str2, size_t n)

Valor de retorno: A função retorna 0 se os dois blocos de memória (n bytes) são iguais; caso contrário, ele retorna as diferenças entre o primeiro par de bytes incompatíveis (bytes são interpretados como objetos char não assinados e, em seguida, promovidos para int).

Exemplo Valor de retorno Explicação
memcmp ( “Hello World”, ”Hello World”, 5 ) 0 Os 5 primeiros caracteres são iguais.
memcmp ( “Hello \ 0 \ 0 \ 0", ”Hello \ 0 World”, 8 ) Inteiro negativo Os primeiros 6 caracteres são iguais, mas o 7º caractere é diferente. Aqui a comparação não parou como strncmp () ao obter o caractere '\ 0'.
memcmp ( “Hello World”, ”hello World”, 11 ) Inteiro negativo O valor ASCII do primeiro caractere sem correspondência da primeira string ('H') é ​​menor que a segunda string ('h')

Exemplo:

A seguir está o exemplo de código C de todas as funções discutidas.

01. / * stringCompare.c * /
02.
03. #incluir
04. #incluir
05.
06. int main ()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" Olá "," Olá \\ 0 Mundo ") =>% d \ n", strcmp ("Olá", "Olá \ 0 Mundo"));
10. printf ("strcmp (" Hello World "," hello World ") =>% d \ n", strcmp ("Hello World", "hello World"));
11. printf ("strcmp (" Olá \\ 0 \\ 0 \\ 0 "," Olá \\ 0 Mundo ") =>% d \ n", strcmp ("Olá \ 0 \ 0 \ 0", "Olá \ 0 Mundo" ));
12.
13. printf ("\ n --------------- \ n");
14.
15. printf ("strncmp (" Hello World "," Hello World ", 5) =>% d \ n", strncmp ("Hello World", "Hello World", 5));
16. printf ("strncmp (" Olá "," Olá \\ 0 Mundo ", 5) =>% d \ n", strncmp ("Olá", "Olá \ 0 Mundo", 5));
17. printf ("strncmp (" Olá \\ 0 \\ 0 \\ 0 "," Olá \\ 0 Mundo ", 8) =>% d \ n", strncmp ("Olá \ 0 \ 0 \ 0", "Olá \ 0 World ", 8));
18. printf ("strncmp (" Hello World "," hello World ", 5) =>% d \ n", strncmp ("Hello World", "hello World", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") =>% d \ n", strcasecmp ("Hello World", "Hello World"));
23. printf ("strcasecmp (" Olá "," Olá \\ 0 Mundo ") =>% d \ n", strcasecmp ("Olá", "Olá \ 0 Mundo"));
24. printf ("strcasecmp (" Hello World "," hello World ") =>% d \ n", strcasecmp ("Hello World", "hello World"));
25.
26. printf ("\ n --------------- \ n");
27.
28. printf ("strncasecmp (" Hello World "," Hello World ", 5) =>% d \ n", strncasecmp ("Hello World", "Hello World", 5));
29. printf ("strncasecmp (" Olá "," Olá \\ 0 Mundo ", 5) =>% d \ n", strncasecmp ("Olá", "Olá \ 0 Mundo", 5));
30. printf ("strncasecmp (" Olá \\ 0 \\ 0 \\ 0 "," Olá \\ 0 Mundo ", 8) =>% d \ n", strncasecmp ("Olá \ 0 \ 0 \ 0", "Olá \ 0 World ", 8));
31. printf ("strncasecmp (" Hello World "," hello World ", 5) =>% d \ n", strncasecmp ("Hello World", "hello World", 5));
32.
33. printf ("\ n --------------- \ n");
34.
35. printf ("memcmp (" Hello World "," Hello World ", 5) =>% d \ n", memcmp ("Hello World", "Hello World", 5));
36. printf ("memcmp (" Olá \\ 0 \\ 0 \\ 0 "," Olá \\ 0 Mundo ", 8) =>% d \ n", memcmp ("Olá \ 0 \ 0 \ 0", "Olá \ 0 World ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. return 0; 40.

Conclusão:

Então, neste tutorial, vimos como as strings podem ser comparadas de várias maneiras. Como vimos, a função stringCompare () retorna -1 para strings desiguais, mas isso pode ser modificado para que retorne o valor ASCII do caractere incompatível. Você pode usá-lo em seu código, que é mais adequado para você.

Como baixar e jogar Sid Meier's Civilization VI no Linux
Introdução ao jogo Civilization 6 é uma versão moderna do conceito clássico introduzido na série de jogos Age of Empires. A ideia era bastante simples...
Como instalar e jogar Doom no Linux
Introdução ao Doom A série Doom teve origem nos anos 90 após o lançamento do Doom original. Foi um sucesso instantâneo e, a partir desse momento, a sé...
Vulkan para usuários de Linux
A cada nova geração de placas gráficas, vemos os desenvolvedores de jogos ultrapassarem os limites da fidelidade gráfica e se aproximarem mais do foto...