Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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".

Editado por cyer
  • 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.

Editado por Mauro Britivaldo

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

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

×