Ir ao conteúdo
  • Cadastre-se

C++ Ler string e ignorar letra maiscula e minuscula


Posts recomendados

Boa noite ,

estou estudando atualmente c++ e me deparei com um problema do The Huxley onde eu deveria criar um código para ler algumas strings e retornar um valor.

Pois bem.... consegui desenvolver o exercicio porém no problema ele diz que o úsuario pode digitar tanto as letras maisculas como minusculas e eu não consegui encontrar nada no google(pelo menos até a página 3) que me solucionasse o problema.

 

Como ler uma string em um CIN ignorando as letras maisculas e minusculas?

 

Problema no site: http://thehuxley.com/problem/449/code-editor/

 

#include <iostream>
#include <string>
#include <iomanip>
#include <cctype>

using namespace std;

int main() {
	string comida, bebida;
	float conta;
	

	
	cin >> comida >> bebida;
	
	
//comida
	if (comida == "Lasanha") {
		conta = conta + 8.0;
	} else if (comida=="Estrogonofe") {
				conta = conta + 11.0;
	}
	
//Bebida
	if (bebida=="Refrigerante") {
		conta = conta + 3.0;
	} else if (bebida=="Suco") {
		conta = conta + 2.5;
	}
	
	cout << fixed;
	cout.precision(2);
	cout << conta << endl;
	/*
	Lista de preços
	lasanha = 8.0;
	estrogonofe = 11.0;
	refrigerante = 3.0;
	suco = 2.0;
	*/
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

O cin não tem essa "função". O jeito mais adequado de se fazer o que você quer é converter todas as letras das strings pra minúsculas, e então comparar com "lasanha", "suco" etc. Para isso, veja tolower que converte um caractere (se for letra) pra minuscula.

 

#include <cctype> // para usar tolower

// ... resto do codigo ...

string transformar_em_minusculas(string s) {
    string nova_s;
    for (int i = 0; i < s.length(); i++) {
        nova_s += tolower(s[i]);
    }
    return nova_s;
}

int main() {
    // ... resto do codigo ...
    cin >> comida >> bebida;
    comida = transformar_em_minusculas(comida);
    // ... resto do codigo ...
}

 

Outra possível solução seria usar stricmp de C (de string insensitive comparison - o "i" é de case insensitive, ou seja, não é sensível a maiúscula/minúscula, marcando ambas como iguais; tem também o strcmp, que é case sensitive):

if (!stricmp(comida.c_str(), "Lasanha")) {
    conta = conta + 8.0;
} // etc

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Bem que eu tinha desconfiado... pode ver que no inicio do meu código declarei a biblioteca cctype li algo sobre tolower e toupper porém, não estava conseguindo usá-lo, parece que so funcionava com variaveis CHAR por isso desisti de me aprofundar nele.

 

Valeu mesmo mano, me salvou em duas dúvidas kkkk vou seguir teu conselho lá do outro tópico e aprender de uma vez por todas C, já que da para aprender as duas ao mesmo tempo, vou parar um pouco com os exercicios e focar mais no aprendizado dessa linguagem no futuro sei que esse conhecimento não vai ser em vão :rezando:

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!