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*/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*/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ê.