Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
GiovanniDosSantosReale

C++ Comparar String em C++

Recommended Posts

Olá pessoal, estou tentando fazer um programa em c++, mas estou tendo problemas para comparar um string no comando WHILE. Pois eu dou um comando que, para que pare de pedir nomes, se digite fim, mas mesmo quando faço isso, não acontece nada.

 

Outro problema é que eu inseri um outro comando for para mostrar as notas dos alunos, e ele simplesmente não entra, não pode colocar FOR e WHILE no mesmo programa?

 

#include <iostream> 
using namespace std;
main()

{
	string nome[15];
	
	float nota[15], media = 0;
	
	int c = 0;
	
	cout<<"Digite um nome, caso não haja nenhum, digite fim: ";
	
	cin>>nome[c];
	
	cout<<"Digite a nota do aluno: ";
	
	cin>>nota[c];
	
	
	c++;
	
    //Logo abaixo eu tento comparar o nome, e caso ele seja fim, o programa finaliza, caso não, ele continua, mas mesmo que eu coloque fim, ele segue até ser parado pelo comando ao lado. 
	 
	while(nome[c] != "fim" && c < 3 )
	{
		cout<<"Digite um nome, casO não Haja nenhum, digite fim: ";
		cin>>nome[c];
		cout<<"Digite a nota do aluno: ";
		cin>>nota[c];
		media = media + nota[c];
		c++;
	
	}
	
	media = media/3;
	//E esse for simplesmente não entra
	for(int d = 0; d == c; d++)
	{
		cout<<"teste";
		if(nota[d] < 7)
		{
			cout<<nome[d]<<" não passo, ele eh um bostinha :3 sua nota foi de: "<<nota[d];
		}
		else
		{
			cout<<nome[d]<<"\n passooooo, ele eh fodaum, com sua nota de: "<<nota[d]; 
		}
	}
	
	cout<<"\nA media foi de :"<<media;
	

}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola @GiovanniDosSantosReale Boa noite. Você deve saber que para comparar strings primitivas, essa que você esta usando formadas por um vetor de caracteres (char), devemos usar de função específica, pois a linguagem não entende comparações diretas tais qual a que tentasse conseguir.  

 

Para tanto usamos o procedimento, ou função se preferir chamar assim, strcmp(). Ela faz parte da biblioteca cstring. Para melhor entender veja a documentação aqui com detalhes do uso mais adequado para função que compara strings.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
47 minutos atrás, Mauro Britivaldo disse:

Ola @GiovanniDosSantosReale Boa noite. Você deve saber que para comparar strings primitivas, essa que você esta usando formadas por um vetor de caracteres (char), devemos usar de função específica, pois a linguagem não entende comparações diretas tais qual a que tentasse conseguir.  

 

Para tanto usamos o procedimento, ou função se preferir chamar assim, strcmp(). Ela faz parte da biblioteca cstring. Para melhor entender veja a documentação aqui com detalhes do uso mais adequado para função que compara strings.

 

Hoje em dia não é mais preciso isso, se você estiver usando a classe string, mesmo que seja um char* você pode usar o operador == ou != sem problema algum, a classe string possui uma função de sobrecarga de operadores para os operadores ==, != e vários outros como o + por exemplo, são varias sobrecargas, tanto para string como para char*/const char*.

 

Agora se for uma comparação entre char* e char* você vai ter que usar a função da linguagem C: strcmp.

 

@GiovanniDosSantosReale está acontecendo esse problema porque você está incrementando o c em + 1, com isso a condição que você está fazendo dentro do while não vai funcionar pois o próximo nome ainda não foi inserido, você precisa comparar dentro do while se o nome inserido é igual a fim.

int main()
{
    string nome[15];
    
    float nota[15], media = 0;
    
    int c = 0;
    
    cout<<"Digite um nome, caso não haja nenhum, digite fim: ";
    
    cin>>nome[c];
    
    cout<<"Digite a nota do aluno: ";
    
    cin>>nota[c];
  
    c++
    
    while (nome[c] != "fim" && c < 3)
    {
        cout<<"Digite um nome, casO não Haja nenhum, digite fim: ";
        cin>>nome[c];
        
        // Se o nome inserido for igual a fim quebra o loop
        if (nome[c] == "fim")
            break;
        
        cout<<"Digite a nota do aluno: ";
        cin>>nota[c];
        media = media + nota[c];
    
    
        c++;
    } 
    
    media = media/3;
    //E esse for simplesmente não entra
    for(int d = 0; d == c; d++)
    {
        cout<<"teste";
        if(nota[d] < 7)
        {
            cout<<nome[d]<<" não passo, ele eh um bostinha :3 sua nota foi de: "<<nota[d];
        }
        else
        {
            cout<<nome[d]<<"\n passooooo, ele eh fodaum, com sua nota de: "<<nota[d]; 
        }
    }
    
    cout<<"\nA media foi de :"<<media;
    

}

 

Uma sugestão: se quer que o código seja executado pelo menos uma vez, utilize "do while" em vez do "while".

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então galera, eu mudei o for e ao invés de criar uma outra variável, eu usei a mesma que tinha usado no while e deu certo, o for está rodando agora, entretanto, mesmo ultilizando o do while, ainda não estou conseguindo comparar, se vocês puderem me ajudar.

 

Aqui está o código agora.

 

#include <iostream> 
using namespace std;
main()

{
	string nome[15];
	
	float nota[15], media = 0;
	
	int c = 0;
	
	
	

	 
	do{
		cout<<"Digite um nome, casO não Haja nenhum, digite fim: ";
		cin>>nome[c];
		cout<<"Digite a nota do aluno: ";
		cin>>nota[c];
		media = media + nota[c];
		c++;
	
	}while(nome[c] != "fim" && c < 3 );
	
	media = media/3;
	
	for(c = 0; c < 3; c++)
	{
		cout<<"teste";
		if(nota[c] < 7)
		{
			cout<<nome[c]<<"\nnaum passo, ele eh um bostinha :3 sua nota foi de: "<<nota[c];
		}
		else
		{
			cout<<nome[c]<<"\npassooooo, ele eh fodaum, com sua nota de: "<<nota[c]; 
		}
	}
	
	cout<<"\nA media foi de :"<<media;
	

}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...

8 horas atrás, GiovanniDosSantosReale disse:

entretanto, mesmo ultilizando o do while, ainda não estou conseguindo comparar, se vocês puderem me ajudar.

Ainda o problema do string?

 IlustraçãoDoMetodoCompare.cpp

/*
 * Programa: IlustraçãoDoMetodoCompare.cpp
 * Escrito por: Mauro Britivaldo
 * Data da Criação: 18/03/2018
 *
 * Propósito: #1 Ilustração para Método Compare do String
 */

// Programa C++ de Demostração.

#include<iostream>
using namespace std;

int main()
  { string ListaDeNomes[3] = { "Fulano","Beltrano","Sicrano" }; //< Lista de Nomes com 3 nomes
    string Nome  ( "Sicrano" );                                 //< Buscaremos o valor do Obejto Nome.
    int escanear = 0;

    while (escanear < 3)
      { if (!ListaDeNomes[ escanear ].compare( Nome ))          //< Mét. String para Comparar.
          { std::cout << "Localizado: " << ListaDeNomes[ escanear ] << endl; }

        ++escanear;	}
    return 0;	}

String.compare ( String ) retorna 0 quando não existe diferença entre os termos.

 

Retornando a algoritmo do programa, temos a seguinte possível aplicação.

/*
 * Programa: IlustraçãoDoMetodoCompare2.cpp
 * Escrito por: Mauro Britivaldo
 * Data da Criação: 18/03/2018
 *
 * Propósito: Colaboração...
 */

// C++ Program to demonstrate working to Strings.compare( ) statements.

#include<iostream>
using namespace std;

int main()
  { string  nomes[ 20 ];
    float   notas[ 20 ];
    float   media = .0f;

    int c = 0;
    do{
      cout<<"Digite um nome, caso nau Haja nenhum, digite fim: ";
      cin>>nomes[ c ]; //! Poderiamos finalizar aqui com IF...
      cout<<"Digite a nota do aluno: ";
      cin>>notas[ c ];
      media = media + notas[ c ];

      c++;
    }while(nomes[ c - 1 ].compare( "fim" ) && c < 20 );

    return 0; }

 

adicionado 24 minutos depois
8 horas atrás, GiovanniDosSantosReale disse:

c++;

while(nome[c] != "fim" && c < 3 );

 

Agora percebi, realmente existe um problema de lógica bem aqui!

Agora veja que o c é pós-incrementado, com isso seu valor em nome[ c ] é sempre um novo objeto da lista. Óbvio desta forma que nunca a comparação seria correlata.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×