C + + já contém uma função de cadeia comparação - " strcmp () " - que realiza a tarefa de comparar duas cadeias de igualdade. A função strcmp ( ) retorna os valores diferentes dependendo da relação das cadeias uma à outra . A implementação de uma função () strcmp difere entre arquiteturas de computadores (ou permanece sob licença a partir de diferentes fornecedores) , mas um programador pode reimplementar a funcionalidade básica do código para ver como ele funciona. Para entender a função , no entanto , o programador deve entender como strings, arrays e ponteiros trabalhar em C e C + +. Cordas , arrays e ponteiros
C , strings são coleções ( ou matrizes ) de caracteres. Por exemplo,
de char string [ 10];
como uma matriz de 10 caracteres , " string" representa uma sentença em C. No entanto , as matrizes são realmente ponteiros , ou variáveis referentes a endereço de memória . A matriz " string" na verdade representa um ponteiro para o primeiro item no bloco de memória, eo programador pode fazer referência a outros itens na matriz através deste ponteiro.
Definindo " strcmp ()" < br >
a definição básica de uma função strcmp será semelhante a este :
int strcmp ( const char * str1 , const char * str2 );
por definição, um função comparação de string irá utilizar duas matrizes de caracteres ( str1 , str2 ) . Desde as matrizes representam ponteiros , a definição terá dois ponteiros de caracteres. Com essas dicas , o programador pode verificar cada item em uma matriz contra outro array. Antes, porém, o programador deve declarar duas variáveis de caracteres , que realizará os valores encontrados nas duas cordas :
int strcmp ( const char * str1 , const char * str2 ) {
carac a, b ;
}
Atravessando as cordas
a fim de comparar as cordas , a função deve comparar cada caractere em cada cadeia de uma outra . Para fazer isso , o programador usa os dois ponteiros ( str1 , str2 ) para mover para baixo cada matriz :
while ( * str1 = '\\ 0' && * str1 == str2 * !) {
str1 + + //move o ponteiro do str1 corda para o próximo caractere
str2 + + //faz o mesmo, str2
}
o loop while faz o pesquisa: primeiro , se str1 atinge um caractere de terminação ("\\ 0 ", que é anexado ao final de strings pela linguagem C) , em seguida, o loop é encerrado , porque essa seqüência é feito. Segundo, se o valor de str1 (* str1 ) não é igual ao valor de str2 (* str2 ), então o loop parar, porque as cordas são desiguais .
Retornando o resultado
< br >
sTRCMP retorna um de três resultados : 0 ( se as cordas são iguais ) , 1 ( se o primeiro é maior do que o segundo ) e -1 ( se o primeiro é menor do que o segundo ) :
char a = * str1 ;
de char b = * str2 ;
if ( a == b)
{return 0;}
mais
{return ( (a < b ) -1 : 1 );}
Desde os laços parar quando não há desigualdade , ou quando ambos terminar, o resultado vai acabar como dois personagens iguais ( o símbolo '\\ 0' ) ou os personagens desiguais encontrado.
code Complete
o código completo , então, é semelhante a este (e implementações irá variar , dependendo da técnica ou do sistema condições ) :
int strcmp ( const char * str1 , const char * str2 ) {
char a , b;
while ( * str1 = '\\ 0' && * str1 == * str2 ) {
str1 + +; ! //move o ponteiro do str1 corda para o próximo caractere
str2 + + //faz o mesmo , str2
}
char a = * str1 ;
de char b = * str2 ;
if ( a == b)
{return 0;}
mais
{return ( (a < b ) -1 : 1 );} }
entrar duas cordas , como
de char string1 [40] = "Esta é uma string ";
de char string2 [40] = "Esta é uma string ";
int result = strcmp ( string1 , string2 );
retornará 0;