Ir para conteúdo
Fórum Script Brasil
  • 0

Comparação entre vetor de char e char


Yunus

Pergunta

1 resposta a esta questão

Posts Recomendados

  • 0

si é C++ pode fazer assim diretamente com strings, porem si for vetor de chars use a funçao strcmp( palavra1, palavra2 ) sendo ambas(palavra1 e palavra2) vetores de char estilo C como char palavra[100]="Alo";

Agora bem, como funciona isso?

A função strcmp() analisa letra a letra comparando as 2 primeiras letras de cada palavra para ver si a primeira letra da palavra1 é igual a primeira palavra 2, si nesse caso for igual simplesmente passa se a comparar a segunda letra da palavra1, com a segunda letra da palavra2, si a primeira letra da palavra1 é menor que a primeira letra da palavra2 a função retorna um -1 que indica que a palavra1 é menor que a palavra2, e se o caso for o contrario, ou seja que a primeira letra da palavra1 for maior que a primeira letra da palavra2 então nesse caso retorna 1, o que quer dizer que a palavra1 é maior que a palavra2. Vamos ver alguns casos.

char p1[100] = "Alo";

char p2[100] = "Alo";

printf("%d", strcmp(p1,p2));

Bem si olhamos esse printf que você acha que vai imprimir, -1, 0 ou 1?

vamos ver... imaginamos que estamos comparando letra a letra ambas palavras, imaginamos que a letra que estiver envolvida entre[] de uma palavra nós estamos comparando com a letra que esteja envolvida com [] em outra palavra ou seja temos 2 palavra "alo" e "mundo", então comparamos "[a]lo" com "[m]undo" ou seja 'a' com 'm'. são iguais, ou 'a' é menor o maior que 'm'? Si são iguais não aconteceria nada, passamos a analisar as segundas letras de cada palavra, porem nesse caso claramente 'a' é menor que 'm', então a função já encontrou diferença e é que 'a' é menor que 'm' sendo que "alo" é uma palavra menor que "mundo", nesse caso a função retorna -1. acho que já da para ter uma ideia de como funciona.

Vamos ver outro exemplo, agora temos 2 vetores de char p1 e p2 e imaginamos que os 2 são iguais, p1="alo" e p2="alo" também, então seria strcmp(p1, p2) que é a mesma coisa que strcmp("alo", "alo");

Que acontece é compara a primeira letra de p1"[a]lo" com a primeira letra de p2"[a]lo", como a função vai ver que são iguais não acontece nada, simplesmente a função passa a analisar a as 2 segundas letras de cada palavra ou seja a letra 'l' de p1 com a letra 'l' de p2, e nesse caso vai acontecer a mesma coisa, ou seja nada, passamos a 3º letra de ambas palavras e vai acontecer a mesma coisa, como chegamos ao final de una o ambas palavras e não tem mais nada para analisar a função retorna 0 que indica que são iguais.

que acontece si analisamos "alimento" com "alinhamento"? strcmp irá comparando letra a letra de ambas palavras até encontrar uma diferença, ou até que uma das palavras terminassem antes ou juntas, nesse caso compararia 'a' com 'a', 'l' com 'l', 'i' com 'i', 'm' com 'n' e então já tem diferença, 'm' é menor que 'n' retorna -1, caso fosse contrario retornava 1. Fácil não?

agora vamos ver exemplos com menos detalhes.

bicicleta

bíceps

//erro strcmp não esta preparado para letras com acento

bicicleta

bisturi

// a letra 3ª letra da 1ªpalavra('c') é menor que a 3ª letra da 2ª palavra('s') retorna -1

relojo

rato

// a 2º letra da 1ª palavra é maior que a 2ª letra da 2ª palavra, nesse caso retorna 1.

e no seguinte caso:

certa

certamente

//?? claramente a primeira palavra é menor então retorna -1. Como depois de certa não existe nada mais porem certamente sim continua da 'm' adiante, então si sabemos que um vetor termina em null em C '\0' é menor que 'm' fim do conto.

agora para comparar sua palavra seria if ( strcmp( palavra, palpite) == 0 ) si ambas palavras fossem iguais, if ( strcmp( palavra, palpite) != 0 ) si fossem diferentes, if ( strcmp( palavra, palpite) == -1 ) si encontramos uma letra menor, antes na primeira palavra que na segunda indicando que a primeira palavra é menor, e finalmente if ( strcmp( palavra, palpite) == 1 ) que indica que a segunda pala é maior que encontraria primeiro uma letra maior na primeira palavra que na segunda. Depende do que você quer fazer claro, porem esses são os 4 casos que se podem dar.

Para más informação: http://www.cplusplus.com/reference/cstring/strcmp/

simplesmente recorde que strcmp compara letra a letra até o final de ambas palavras, si são iguais retorna 0, si atingimos uma letra menor na primeira palavra que na segunda retorna -1 e si atingimos uma letra maior na primeira que na segunda retorna 1. Essa é a regra que temos que recordar, assim é como trabalha strcmp(). Se pode dizer que si a palavra da esquerda é menor que a da direita retorna -1, si são iguais retorna 0, e si a palavra da direita é maior retorna 1, porem não é assim como strcmp trabalha, é uma forma errônea de pensar já que o programa analisa sempre a primeira palavra em relação com a segunda, letra a letra, e tudo vai depender si encontra uma letra maior, igual o menor na primeira palavra, porem funciona também.

Outra coisa a ter claro é que as funções recebem e retornam valores, aprenda a jogar com esses valores de retorno e serás capaz de montar autênticos programas super uteis. Não precisa recordar tudo de cabeça, só lembre que as funções retornam coisas, e si você tiver claro para que serve uma função, é só buscar ela no Google que te vai sair sempre essa pagina chamada cplusplus.com que te diz como funciona uma função, que retorna etc etc, com só por no Google "strcmp".

Cabe destacar que para saber os valores de si uma letra é maior menor ou igual a outra, devemos buscar na tabela Asc2.

Si tiver duvidas al menos diga que quer saber de ambos vetores que palavras guardam cada um deles, e si você quiser saber si são iguais, diferentes, maior ou menor.

Sorte

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...