Seja muito bem vindo à aula 136 do nosso curso gratuito de programação com a linguagem C. Na aula de hoje vamos aprender como comparar duas strings com a função strcmp() na linguagem de programação C. Em muitas situações é necessário a comparação de strings. Essa operação se torna muito simples com a função strcmp(), como visto a seguir: char str1[100] = {"Bom dia"}; char str2[100] = {"Bom dia"}; int resultado; resultado = strcmp(str1, str2);A função strcmp() pode retornar 3 possíveis valores inteiros:0 = se a duas strings são iguais.-1 = se a primeira string ocorre primeiro que a segunda; 1 = se a segunda string ocorre primeiro que a primeira.
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; }
Exemplo: if (strcmp (nome, "Teste") == 0) ...
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) ...
[/quote]
Só complementando, para comparar ignorando letras maiúsculas/minúsculas, basta usar o stricmp. Valeu
char input[40]; char check[40]; strcpy(input, "Hello"); // input assigned somehow strcpy(check, "Hello"); // check assigned somehow // insufficient while (check != input) // good while (strcmp(check, input) != 0) // or while (strcmp(check, input)) Let us dig deeper to see why check != input is not sufficient. In C, string is a standard library specification.
input above is not a string. input is array 40 of char. The contents of input can become a string. In most cases, when an array is used in an expression, it is converted to the address of its 1st element. The below converts check and input to their respective addresses of the first element, then those addresses are compared. To compare strings, we need to use those addresses and then look at the data they point to.
Not only can code find if the strings are of the same data, but which one is greater/less when they differ. The below is true when the string differ. strcmp(check, input) != 0For insight, see Creating my own strcmp() function
Olá, pessoal, quero comparar duas strings porém o resultado não está retornando o que é esperado, que nesse caso seria o índice na função busca_nome, o erro está na quarta linha da função busca, mas estou disponibilizando todo código. o teste da quarta linha não esta retornando verdadeiro nem quando as duas strings são iguais, alguém sabe me dizer por que? Grato desde já. /* * File: main.c * Author: pmargreff * * Created on 6 de Novembro de 2014, 00:25 */ #include <stdio.h> #include <stdlib.h> #define MAX 100 struct end { char nome[100]; char rua[100]; char cidade[100]; char estado[100]; unsigned long int cep; } info[MAX]; /* * struct para conseguir comparar * dois nomes em diversas funções */ struct compara { char nome[100]; } busca; void cria_lista(void); void insere(void); void apaga(void); void imprime(void); int menu(void); int livre(void); void ler_string(char palavra[100], int tamanho); int main(void) { int escolha; cria_lista(); for (;;) { escolha = menu(); switch (escolha) { case 1: insere(); break; case 2: apaga(); break; case 3: imprime(); break; case 4: exit(0); break; } } } void cria_lista(void) { int i; for (i = 0; i < MAX; i++) info[i].nome[0] = '\0'; } int menu(void) { int c = 0; do { printf("-- MENU:\n"); printf("\t 1. Inserir um nome\n"); printf("\t 2. Excluir um nome\n"); printf("\t 3. Listar o arquivo\n"); printf("\t 4. Sair\n"); printf("-- Digite sua escolha: "); scanf("%d", &c); } while (c <= 0 || c > 4); getchar(); return c; } void ler_string(char palavra[100], int tamanho) { int i = 0; char c; c = getchar(); while ((c != '\n') && (i < tamanho)) { palavra[i++] = c; c = getchar(); } palavra[i] = '\0'; if (c != '\n') { c = getchar(); while ((c != '\n') && (c != EOF)) { c = getchar(); } } } void insere(void) { int posicao; posicao = livre(); if (posicao == -1) { printf("\nEstrutura Cheia!!"); return; } printf("-- Registro %d:\n", posicao); printf("\t Nome: "); ler_string(info[posicao].nome, 30); printf("\t Rua: "); ler_string(info[posicao].rua, 40); printf("\t Cidade: "); ler_string(info[posicao].cidade, 20); printf("\t Estado: "); ler_string(info[posicao].estado, 2); printf("\t CEP: "); scanf("%lu", &info[posicao].cep); } int livre(void) { int i; for (i = 0; info[i].nome[0] && i < MAX; i++); if (i == MAX) return -1; return i; } /* * chama a funçao busca_nome que retorna o indice * para a variavel posicão que devera ser apagado * se nenhum nome igual for encontrado retorna -1 */ void apaga(void) { int posicao; posicao = busca_nome(); if (posicao >= 0 && posicao < MAX) info[posicao].nome[0] = '\0'; } void imprime(void) { int i; for (i = 0; i < MAX; i++) if (info[i].nome[0] != '\0') { printf("-- Registro %d:\n", i); printf("\t Nome: %s", info[i].nome); printf("\t Rua: %s", info[i].rua); printf("\t Cidade: %s", info[i].cidade); printf("\t Estado: %s\n", info[i].estado); printf("\t CEP: %lu\n", info[i].cep); } } /* * função que faz a busca de um nome no programa * le o nome que está localizado na struct busca.nome * e retorna o indice se encontrar nome igual ou * -1 se não encontrar nome como aquele */ int busca_nome(void) { int i; ler_string(busca.nome, 30); for (i = 0; i < MAX; i++) { if (info[i].nome == busca.nome){ return i; } } return -1; } |