Como comparar duas stings em c

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 duas stings em c

Faça um programa para comparar se duas strings são iguais.

Comentários: este é mais um exercício para exercitarmos laços de repetição. Esta série referem-se as strings pois, sabemos que em C as strings se assemelham a um vetor (char string[]).

Linguagem C

Na linguagem C, como dito, sabemos que as strings em questão são 2 vetores e que o caminho mais provável seja comparar os valores de ambos os vetores um a um. Utilize o código abaixo para encontrar a sua solução.

#include <stdio.h> #include <assert.h> // // Função que compara se duas string são iguais // int compararStrings(char str1[], char str2[]) { // Aqui entra a lógica do programa. } // // Testes // int main() { char ola[] = "ola"; char ola2[] = "ola"; assert(1 == compararStrings(ola, ola2)); return 0; }

Solução na linguagem C

// // Função que compara se duas string são iguais // int compararStrings(char str1[], char str2[]) { int i = 0; do { if(str1[i] != str2[i]) { return 2; } i++; } while(str1[i] != 0); return 1; }

Desafio na linguagem C

A função abaixo também funciona, porém a implementação dela é bem diferente.

O desafio é entender o que está acontecendo.

int compararStrings(char str1[], char str2[]) { int i = 0; for (i = 0; str1[i] == str2[i]; i++) { if (str1[i] == 0) { return 1; } } return 2; }

Linguagem Python

Em Python, no terminal, vemos que nosso objetivo (compara duas strings) é facilmente alcançado.

>>> "palavra" == "palavra" True

Como seria a solução se tivéssemos que construir um laço de repetição?

Vamos praticar…

# -*- coding: utf-8 -*- # # Seu código # def compararString(a, b): pass # # Seu teste # cor1 = "laranja" cor2 = "amarelo" assert not compararString(cor1, cor2) assert compararString(cor1, cor1)

Solução na linguagem Python

# -*- coding: utf-8 -*- # # Seu código # def compararString(a, b): i = 0 while i < len(a): if a[i] != b[i]: return False break i += 1 return True # # Seu teste # cor1 = "laranja" cor2 = "amarelo" assert not compararString(cor1, cor2) assert compararString(cor1, cor1)

Linguagem JavaScript

Em JS temos a mesma facilidade….

> "laranja" == "laranja" true > "laranja" != "amarelo" true >

O laço de repetição é trivial.