Como comparar uma string e inteiro em c++

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; }

  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 uma string e inteiro em c++

How do I properly compare strings?

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.

A string is a contiguous sequence of characters terminated by and including the first null character.
C11 §7.1.1 1

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.

check != input // Compare addresses, not the contents of what addresses reference

To compare strings, we need to use those addresses and then look at the data they point to.
strcmp() does the job. §7.23.4.2

int strcmp(const char *s1, const char *s2);

The strcmp function compares the string pointed to by s1 to the string pointed to by s2.

The strcmp function returns an integer greater than, equal to, or less than zero, accordingly as the string pointed to by s1 is greater than, equal to, or less than the string pointed to by s2.

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) != 0

For 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; }