Como comparar duas variaveis no 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.

Pré-requisito: Sobrecarga do Operador em C++
Dadas duas strings, como verificar se as duas strings são iguais ou não, usando a Sobrecarga do Operador.

Exemplos: 

Input: ABCD, XYZ Output: ABCD is not equal to XYZ ABCD is greater than XYZ Input: Geeks, Geeks Output: Geeks is equal to Geeks

Abordagem: usando sobrecarga de operador binário. 

  • Declare uma classe com uma variável de string e função de operador '==', '<=' e '> =' que aceita uma instância da classe e compara sua variável com a variável de string da instância atual.
  • Crie duas instâncias da classe e inicialize suas variáveis ​​de classe com as duas strings de entrada, respectivamente.
  • Agora, use a função de operador sobrecarregado (==, <= e> =) para comparar a variável de classe das duas instâncias.

Abaixo está a implementação da abordagem acima: 

// C++ program to compare two Strings // using Operator Overloading #include <cstring> #include <iostream> #include <string.h> using namespace std; // Class to implement operator overloading // function for concatenating the strings class CompareString { public: // Classes object of string char str[25]; // Parameterized Constructor CompareString(char str1[]) { // Initialize the string to class object strcpy(this->str, str1); } // Overloading '==' under a function // which returns integer 1/true // if left operand string // and right operand string are equal. //(else return 0/false) int operator==(CompareString s2) { if (strcmp(str, s2.str) == 0) return 1; else return 0; } // Overloading '<=' under a function // which returns integer 1/true // if left operand string is smaller than // or equal to the right operand string. // (else return 0/false) int operator<=(CompareString s3) { if (strlen(str) <= strlen(s3.str)) return 1; else return 0; } // Overloading '>=' under a function // which returns integer 1/true // if left operand string is larger than // or equal to the right operand string. //(else return 0/false) int operator>=(CompareString s3) { if (strlen(str) >= strlen(s3.str)) return 1; else return 0; } }; void compare(CompareString s1, CompareString s2) { if (s1 == s2) cout << s1.str << " is equal to " << s2.str << endl; else { cout << s1.str << " is not equal to " << s2.str << endl; if (s1 >= s2) cout << s1.str << " is greater than " << s2.str << endl; else cout << s2.str << " is greater than " << s1.str << endl; } } // Testcase1 void testcase1() { // Declaring two strings char str1[] = "Geeks"; char str2[] = "ForGeeks"; // Declaring and initializing the class // with above two strings CompareString s1(str1); CompareString s2(str2); cout << "Comparing \"" << s1.str << "\" and \"" << s2.str << "\"" << endl; compare(s1, s2); } // Testcase2 void testcase2() { // Declaring two strings char str1[] = "Geeks"; char str2[] = "Geeks"; // Declaring and initializing the class // with above two strings CompareString s1(str1); CompareString s2(str2); cout << "\n\nComparing \"" << s1.str << "\" and \"" << s2.str << "\"" << endl; compare(s1, s2); } // Driver code int main() { testcase1(); testcase2(); return 0; }

Saída: Comparando "Geeks" e "ForGeeks" Geeks não é igual a ForGeeks ForGeeks é maior que Geeks Comparando "Geeks" e "Geeks" Geeks é igual a Geeks

Última postagem

Tag