Comparação de strings: Programação C

String Comparison C Programming



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 com muita facilidade. Então vamos começar.



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

Vamos escrever uma função stringCompare () para comparar strings. Percorremos as strings e comparamos cada caractere da string até chegarmos ao fim de qualquer um ou ambos ou encontrarmos uma incompatibilidade. Se a travessia for alcançada até o final de ambas as sequências, as sequências serão correspondidas; caso contrário, as strings são incompatíveis.



01./*userDefinedFunction.c*/
02.
03.#incluir
04.
05.intstringCompare( Caracteresstr1[ ], Caracteresstr2[ ] )
06.{
07.inteu=0;
08
09 enquanto(str1[eu] ==str2[eu] )
10.
quinze.
16.E se(str1[eu] == ' 0' &&str2[eu] == ' 0' )
17.Retorna 0;
18.outro
19.Retorna -1;
vinte.
vinte e um.}
22.
2,3.
24.inta Principal()
25.{
26.Caracteresstr1[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.E se(stringCompare(str1,str2) == 0)
3. 4. printf ('As cordas são iguais n');
35.outro
36. printf ('As cordas não são iguais n');
37.
38.Retorna 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 chegar ao final de ambas as strings, as strings serã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 string.h arquivo de cabeçalho.



função strcmp ():

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

Sintaxe :

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

Valor de retorno: Retorne 0 se as strings forem iguais. Retorne um número inteiro negativo se o valor ASCII do primeiro caractere sem correspondência da primeira string for menor que a segunda string. Retorne 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 não correspondido da primeira string for menor que a segunda string e retornam 1 se o valor ASCII do primeiro caractere não correspondido de a primeira string é maior do que a segunda string.

Exemplo Valor de retorno Explicação
strcmp ( Hello World, Hello World ) 0 Duas cordas são iguais.
strcmp ( Olá, Olá 0 Mundo ) 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 ( Olá mundo, olá mundo ) Inteiro negativo O valor ASCII do primeiro caractere sem correspondência da primeira string ('H') é ​​menor que a segunda string ('h')
strcmp ( olá mundo, olá mundo ) Inteiro positivo O valor ASCII do primeiro caractere sem correspondência da primeira string ('h') é maior do 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 Caracteres *str1, const Caracteres *str2, size_tn)

Valor de retorno: A função retorna 0 se o primeiro n os caracteres das duas strings são iguais; caso contrário, ele 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 primeiros 5 caracteres são iguais.
strncmp ( Olá, Olá 0 Mundo, 5 ) 0 Os primeiros 5 caracteres são iguais.
strncmp ( Olá 0 0 0 ″, Olá 0 Mundo, 8 ) 0 ‘ 0’ está após os primeiros 5 caracteres em ambas as strings. Portanto, a comparação é interrompida após 5 e não 8.
strncmp ( Olá mundo, olá mundo, 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:

intstrcasecmp(const Caracteres *str1, const Caracteres *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 ( Olá, Olá 0 Mundo ) 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 ( Olá mundo, olá mundo ) 0 Strings são sensível a maiúsculas e minúsculas. Portanto, Hello World e hello World são iguais.

função strncasecmp ():

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

Sintaxe:

intstrncasecmp(const Caracteres *str1, const Caracteres *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 primeiros 5 caracteres são iguais.
strncasecmp ( Olá, Olá 0 Mundo, 5 ) 0 Os primeiros 5 caracteres são iguais.
strncasecmp ( Olá 0 0 0 ″, Olá 0 Mundo, 8 ) 0 ‘ 0’ está após os primeiros 5 caracteres em ambas as strings. Portanto, a comparação é interrompida após 5 e não 8.
strncasecmp ( Olá mundo, olá mundo, 5 ) 0 Strings são sensível a maiúsculas e minúsculas. Então, Hello e Hello 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 a comparar.

Sintaxe:

int memcmp (const vazio *str1, const vazio *str2, size_tn)

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 incompatível de bytes (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 primeiros 5 caracteres são iguais.
memcmp ( Olá 0 0 0 ″, Olá 0 Mundo, 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.inta Principal()
07.{
08 printf ('strcmp ('Olá Mundo','Olá Mundo') =>% d n', strcmp ( 'Olá Mundo','Olá Mundo' ));
09 printf ('strcmp ('Olá','Olá\0Mundo') =>% d n', strcmp ( 'Olá','Olá 0Mundo' ));
10. printf ('strcmp ('Olá Mundo','Olá Mundo') =>% d n', strcmp ( 'Olá Mundo','Olá Mundo' ) );
onze. printf ('strcmp ('Olá\0\0\0','Olá\0Mundo') =>% d n', strcmp ( 'Olá 0 0 0','Olá 0Mundo' ));
12.
13. printf (' n--------------- n');
14.
quinze. printf ('strncmp ('Olá Mundo','Olá Mundo', 5) =>% d n', strncmp ( 'Olá Mundo','Olá Mundo',5 ));
16. printf ('strncmp ('Olá','Olá\0Mundo', 5) =>% d n', strncmp ( 'Olá','Olá 0Mundo',5 ));
17. printf ('strncmp ('Olá\0\0\0','Olá\0Mundo', 8) =>% d n', strncmp ( 'Olá 0 0 0','Olá 0Mundo',8 ));
18. printf ('strncmp ('Olá Mundo','Olá Mundo', 5) =>% d n', strncmp ( 'Olá Mundo','Olá Mundo',5 ));
19.
vinte. printf (' n--------------- n');
vinte e um.
22. printf ('strcasecmp ('Olá Mundo','Olá Mundo') =>% d n',strcasecmp( 'Olá Mundo','Olá Mundo' ));
2,3. printf ('strcasecmp ('Olá','Olá\0Mundo') =>% d n',strcasecmp( 'Olá','Olá 0Mundo' ));
24. printf ('strcasecmp ('Olá Mundo','Olá Mundo') =>% d n',strcasecmp( 'Olá Mundo','Olá Mundo' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Olá Mundo','Olá Mundo', 5) =>% d n',strncasecmp( 'Olá Mundo','Olá Mundo',5 ) );
29. printf ('strncasecmp ('Olá','Olá\0Mundo', 5) =>% d n',strncasecmp( 'Olá','Olá 0Mundo',5 ));
30. printf ('strncasecmp ('Olá\0\0\0','Olá\0Mundo', 8) =>% d n',strncasecmp( 'Olá 0 0 0','Olá 0Mundo',8 ));
31. printf ('strncasecmp ('Olá Mundo','Olá Mundo', 5) =>% d n',strncasecmp( 'Olá Mundo','Olá Mundo',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Olá Mundo','Olá Mundo', 5) =>% d n', memcmp ( 'Olá Mundo','Olá Mundo',5 ) );
36. printf ('memcmp ('Olá\0\0\0','Olá\0Mundo', 8) =>% d n', memcmp ( 'Olá 0 0 0','Olá 0Mundo',8 ));
37. printf ('memcmp ('Olá Mundo','Olá Mundo', 11) =>% d n', memcmp ( 'Olá Mundo','Olá Mundo',onze ));
38.
39.Retorna 0; 40.}

Conclusão:

Portanto, 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ê.