Comparação de string c Programação

Comparação de string c Programação
Uma string na linguagem C é uma variedade de caracteres, que é encerrada com um caractere nulo (\ 0). Usando estas strings de propriedades são comparadas.

Duas cordas podem ser comparadas de várias maneiras. Neste tutorial, primeiro, veremos uma função definida pelo usuário para comparar duas strings e depois veremos algumas funções de biblioteca embutidas que podem ser usadas para comparar duas strings com muita facilidade. Então vamos começar.

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

Vamos escrever uma função StringCompare () Para comparar strings. Atravessamos as cordas e comparamos cada personagem da corda até chegarmos ao fim de qualquer um ou de ambos ou um incompatível são encontrados. Se a travessia for alcançada até o final de ambas as cordas, as cordas serão correspondidas; Caso contrário, as cordas 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. while (str1 [i] == str2 [i])
10.
11. if (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. quebrar;
13. i ++;
14.
15.
16. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. retornar 0;
18. outro
19. retornar -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 sequência:");
31. scanf ("%[^\ n]%*c", str2);
32.
33. if (stringcompare (str1, str2) == 0)
34. printf ("As cordas são iguais \ n");
35. outro
36. printf ("As cordas não são iguais \ n");
37.
38. retornar 0; 39.

Aqui, atravessamos as cordas usando o loop e uma variável eu. Quando os caracteres são iguais na mesma posição de ambas as cordas, o valor de eu é incrementado por 1 (linha 13). Se os caracteres não forem iguais (linha 09) ou chegarmos ao final da string (linha 11), então o loop while é uma quebra. Após o while loop, verificamos que os dois travessos de string são alcançados até o fim ou não (linha 16). Se a travessia for alcançada até o final de ambas as cordas, as cordas serão iguais, caso contrário, não.

Comparação de string usando funções de biblioteca interna:

As funções da biblioteca a seguir podem ser usadas para comparação de string. Todas as funções são declaradas no corda.h arquivo de cabeçalho.

função strcmp ():

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

Sintaxe:

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

Valor de retorno: Retornar 0 se as cordas forem iguais. Retorne um número inteiro negativo se o valor ASCII do primeiro caráter incomparável da primeira string for menor que a segunda string. Retorne um número inteiro positivo se o valor ASCII do primeiro caráter incomparável da primeira string for maior que a segunda string. Alguns sistemas retornam a diferença do valor ASCII do primeiro caráter incompatível e alguns sistemas retornam -1 se o valor ASCII do primeiro caráter incomparável da primeira sequência for menor que a segunda sequência e retorne 1 se o valor ASCII do primeiro caractere incomparável de A primeira string é maior que a segunda sequência.

Exemplo Valor de retorno Explicação
STRCMP ( "Hello World", "Hello World" ) 0 Duas cordas são iguais.
STRCMP ( "Olá", "Hello \ 0 World" ) 0 As cordas são comparadas até o personagem '\ 0'. A primeira string por padrão termina com '\ 0', e a segunda string contém o caractere '\ 0' depois de 'hello'.
STRCMP ( "Olá \ 0 \ 0 \ 0", "Hello \ 0 World" ) 0 As cordas são comparadas até o personagem '\ 0'.
STRCMP ( "Hello World", "Hello World" ) Inteiro negativo O valor ASCII do primeiro personagem incomparável da primeira string ('H') é ​​menor que a segunda sequência ('H')
STRCMP ("Hello World", "Hello World" ) Número inteiro positivo O valor ASCII do primeiro personagem incomparável da primeira string ('H') é ​​maior que a segunda sequência ('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 cordas são iguais; Caso contrário, ele retorna inteiro negativo ou positivo, dependendo do sinal das diferenças entre o primeiro valor ASCII do Primeiro Personagem.

Exemplo Valor de retorno Explicação
strncmp ( "Hello World", "Hello World", 5 ) 0 Os primeiros 5 caracteres são iguais.
strncmp ( "Hello", "Hello \ 0 World", 5 ) 0 Os primeiros 5 caracteres são iguais.
strncmp ( "Olá \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) 0 '\ 0' está depois dos 5 primeiros caracteres em ambas as cordas. 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 personagem incomparável da primeira string ('H') é ​​menor que a segunda sequência ('H')

função strcaSecmp ():

Esta função é semelhante à função strcmp (), Mas aqui as cordas não são sensíveis ao caso.

Sintaxe:

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

Valor de retorno: Igual a strcmp (), Mas as cordas são tratadas como Case-em-sensível.

Exemplo Valor de retorno Explicação
strcasecmp ( "Hello World", "Hello World" ) 0 Duas cordas são iguais.
strcasecmp ( "Olá", "Hello \ 0 World" ) 0 As cordas são comparadas até o personagem '\ 0'. A primeira string por padrão termina com '\ 0', e a segunda sequência contém o caractere '\ 0' depois de 'hello'.
strcasecmp ( "Hello World", "Hello World" ) 0 Strings são Case-em-sensível. Então, "Hello World" e "Hello World" são iguais.

função strncasecmp ():

Esta função é semelhante à função strncmp (), Mas aqui as cordas não são sensíveis ao caso.

Sintaxe:

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

Valor de retorno: Igual a strncmp (), Quando as cordas são tratadas como caso em caso.

Exemplo Valor de retorno Explicação
strncasecmp ( "Hello World", "Hello World", 5 ) 0 Os primeiros 5 caracteres são iguais.
strncasecmp ( "Hello", "Hello \ 0 World", 5 ) 0 Os primeiros 5 caracteres são iguais.
strncasecmp ( "Olá \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) 0 '\ 0' está depois dos 5 primeiros caracteres em ambas as cordas. Então, a comparação é interrompida após 5 não 8.
strncasecmp ( "Hello World", "Hello World", 5 ) 0 Strings são Case-em-sensível. Então, "Olá" e "Hello" são iguais.

função memcmp ():

Esta função compara dois blocos de memória byte byte 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 de char não assinados e depois promovidos para int).

Exemplo Valor de retorno Explicação
memcmp ( "Hello World", "Hello World", 5 ) 0 Os primeiros 5 caracteres são iguais.
memcmp ( "Olá \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) Inteiro negativo Os 6 primeiros caracteres são os mesmos, mas o 7º personagem é diferente. Aqui a comparação não parou como strncmp () Ao conseguir o personagem '\ 0'.
memcmp ( "Hello World", "Hello World", 11 ) Inteiro negativo O valor ASCII do primeiro personagem incomparável da primeira string ('H') é ​​menor que a segunda sequência ('H')

Exemplo:

A seguir, o exemplo do 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 (" Hello "," Hello \\ 0 World ") => %d \ n", strcmp ("Hello", "Hello \ 0 World"));
10. printf ("strcmp (" Hello World "," Hello World ") => %d \ n", strcmp ("Hello World", "Hello World"));
11. printf ("strcmp (" hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ") => %d \ n", strcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 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 (" Hello "," Hello \\ 0 World ", 5) => %d \ n", strncmp ("Hello", "Hello \ 0 World", 5));
17. printf ("strncmp (" Olá \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) => %d \ n", strncmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 mundo ", 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 (" hello "," hello \\ 0 mundal ") => %d \ n", strcasecmp ("hello", "hello \ 0 world"));
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 (" hello "," hello \\ 0 world ", 5) => %d \ n", strncasecmp ("hello", "hello \ 0 world", 5));
30. printf ("strncasecmp (" hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) => %d \ n", strncasecmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 mundo ", 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 (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) => %d \ n", memcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 mundo ", 8));
37. printf ("memcmp (" hello world "," hello world ", 11) => %d \ n", memcmp ("hello world", "hello world", 11));
38.
39. retornar 0; 40.

Conclusão:

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