Como comparar três variáveis strings linguagem c

Por: Eduardo Casavella

Show

    A biblioteca string.h da linguagem C, contém uma série de funções para manipular strings.

    Neste artigo veremos como:

    • Copiar strings em C usando strcpy e strncpy;
    • Concatenar strings em linguagem C usando strcat e strncat;
    • Descobrir o tamanho de uma string em C usando strlen();
    • Comparar strings em C usando strcmp();

    Construiremos exemplos de programas em C para exemplificar as funções mais utilizadas.

    Nas funções a seguir, utilizamos o seguinte padrão para descrever
    a sintaxe:

    string_destino: é a string que recebe a cópia

    string_origem: é a string que contém a cadeia de caracteres que será copiada.

    strcpy

    Sintaxe:

    strcpy(string_destino, string_origem);

    Realiza a cópia do conteúdo de uma variável a outra.

    Obs:Ambas devem ser strings.

    #include <stdio.h> #include <string.h> //necessário para strcpy #include <conio.h> int main (void) { char nome[15]; strcpy(nome, "Fulano de Tal"); //strcpy(string_destino, string_origem); //note que a string de destino é nome //a string de origem é "Fulano de Tal" printf("Nome = %s", nome); getch(); return 0; }

    Tela de execução

    Como comparar três variáveis strings linguagem c

    Execução do exemplo strcpy

    strncpy

    Sintaxe:

    strncpy(string_destino, string_origem, tamanho);

    Realiza a cópia do conteúdo de uma variável a outra, porém,
    deve ser especificado o tamanho a ser copiado.

    Obs:Tanto a variável de destino como a de origem devem ser strings.

    #include <stdio.h> #include <string.h>//necessário para strncpy #include <conio.h> int main (void) { char str1[8] = "Curso C"; char str2[5]; strncpy(str2, str1, 5); str2[5] = '\0'; printf("str2 = %s\n", str2); getch(); return 0; }

    Tela de execução

    Como comparar três variáveis strings linguagem c

    Execução do exemplo strncpy

    strcat

    Sintaxe

    strcat(string_destino, string_origem);

    Realiza a concatenação do conteúdo de uma variável a outra.
    Ambas devem ser strings.

    //Exemplo strcat #include <stdio.h> #include <string.h>//necessário para strcat #include <conio.h> int main (void) { char str[10] = "Curso"; strcat(str, " de C"); //Concatena a string " de C" com o conteúdo da string str printf("str = %s\n", str); //Será exibido curso de C getch(); return 0; }

    Tela de execução

    Como comparar três variáveis strings linguagem c

    Execução do exemplo strcat

    strncat

    Sintaxe:

    strncat(string_destino, string_origem, tamanho);

    Realiza a concatenação do conteúdo de uma variável a outra, porém, deve ser especificado o tamanho a ser concatenado.

    Ambas devem ser strings.

    Se criarmos duas strings com o mesmo conteúdo e tentarmos compará-las utilizando a igualdade (==), assim como é feito com variáveis numéricas (inteira ou real), iremos perceber que a execução não acontecerá como desejado, pois este tipo de comparação utilizando strings (vetores de caracteres) não irá comparar o conteúdo de cada vetor (palavra), e sim o endereço de memória dos mesmos, que estão localizados em posições diferentes. Então, conclui-se que nunca obteremos a correta comparação do conteúdo das palavras desta forma... a não ser, se fizermos a comparação de caractere por caractere utilizando funções similares a este exemplo:int compara_string (char str1[], char str2[]) {
        int i, test = 0;   
        /* Aqui utilizo a função strlen() da biblioteca "string.h" para comparar o tamanho das palavras,
        caso as palavras tenham tamanhos diferentes, a comparação não é necessária,
        então a função irá retornar zero, que seria o valor da variável "test". */
        if (strlen(str1) == strlen(str2)) {
            int tam = strlen(str1);     //a variável "tam" irá receber o valor, referente ao tamanho das palavras
            for (i = 0; i < tam; i++) {
                if (str1[i] == str2[i]) {   //comparação de caractere por caractere
                    test = 1;                      // caso todas os caracteres forem iguais, será retornado 1 (true)  
                } else {
                    test = 0;                      //se ao menos um caractere for diferete será retornado 0 (false)
                    break;                         //após o primeiro caractere diferente a execução do loop é interrompida            }        }    }        return test;
    }

    Por outro lado, uma forma mais prática de se comparar strings na linguagem "C" é utilizando a função "strcmp()".

    Protótipo:  int strcmp (char *s1, char *s2);

    Forma Geral:  strcmp(string1, string2);

    Valores retornados: - Se as duas strings forem idênticas a função retorna 0 (zero).

    - Se elas forem diferentes a função retorna valores diferentes de zero, sendo

    maiores quando a string1 for maior que a string2, ou menores quando a string1 for menor que a string2. Onde esta comparação é feita entre as primeiras letras de cada palavra, obedecendo a ordem alfabética.

    Um exemplo de sua utilização (linguagem C):



    NOTA: Como queremos saber se as palavras são idênticas utilizando a strcmp(), então é necessário a utilização do sinal do sinal "!" (exclamação) posicionando-o antes da condição de dentro do "if", pois se realmente forem as palavras forem iguais será retornado 0 (zero), e como "0" é false, desta forma caso não o utilizarmos o SE (if) não seria executado. Então utiliza-se este sinal (!), pois a negação de zero é true (1), desta maneira com certeza o programa será executado como esperado.

    Olá Galera. Eu já tenho conhecimento em programação, mas iniciei em C há alguns dias apenas. Eu estou praticando Operadores Relacionais e Operadores Lógicos.

    Eu tenho um char nome[5]; e o valor que é atribuido a ele não bate com a String que eu comparo. Gostaria de ajuda para resolver isso.


    Estou usando a string "Teste" como exemplo, eis o código-fonte:

    #include <stdio.h> int main(void) { char nome[5]; int idade; printf("Escreva o seu nome: "); //Escreva Teste scanf("%s", &nome); printf("Escreva a sua idade: "); scanf("%d", &idade); if(idade > 0 && nome == "Teste") { printf("Resultado: Encontrado"); } else { printf("Resultado: Nao encontrado"); } return 0; }

    1. C != C++
    2. Se uma coisa compila em C, não quer dizer que vai funcionar
    3. Você precisa ler sua apostila. O método para comparar 2 strings em C se chama “strcmp”.

    Exemplo:

    if (strcmp (nome, "Teste") == 0) ...
    1. Sempre que você criar uma string em C, você precisa definir um array de char com mais espaço que você pensa em usar, porque pelo menos o terminador da string (\0) é necessário guardar. No seu caso, em vez de ser econômico, declare com char nome [128].

    Cara, segue o site abaixo que pode solucionar boa parte das tuas dúvidas em C…

    http://www.cplusplus.com/reference/clibrary/

    Sobre comparar duas strings em C…

    http://www.cplusplus.com/reference/cstring/strcmp/

    Só a título de curiosidade, quando você faz nome == “Teste” você está comparando o valor de endereço deles na memória.

    [quote=entanglement]1) C != C++ 2) Se uma coisa compila em C, não quer dizer que vai funcionar

    3) Você precisa ler sua apostila. O método para comparar 2 strings em C se chama “strcmp”.

    Exemplo:

    if (strcmp (nome, "Teste") == 0) ...
    1. Sempre que você criar uma string em C, você precisa definir um array de char com mais espaço que você pensa em usar, porque pelo menos o terminador da string (\0) é necessário guardar. No seu caso, em vez de ser econômico, declare com char nome [128].

    [/quote]
    Obrigado já corrigi o que estava errado e agora está funcionando. Eu não sabia da existência do método. Na verdade esse exemplo não está no livro que eu estou lendo.

    Só complementando, para comparar ignorando letras maiúsculas/minúsculas, basta usar o stricmp.

    Valeu

    Como comparar três variáveis strings linguagem c