Jump to content
Fórum Script Brasil
  • 0

Comparação entre vetor de char e char


Yunus
 Share

Question

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...