Ir ao conteúdo

C++ comparação de string orientação ao objeto


Ir à solução Resolvido por Rieidi,

Posts recomendados

Postado

Bom dia, sou iniciante em programação.

    Estou com problemas com a comparação de string na função método, ele tem uma estrutura condicional que vai comparar  o sexo do funcionário.

Se sexo do funcionário digitado for igual a "masculino" então execute as seguintes instruções.

Se não se sexo funcionário digitado for igual a "feminino" então execute as seguintes instruções.

 

#include <iostream>
//#include <cstdlib>//para usar a função método std::atof() para realizar a conversão de string para float
#include <string>
#include <vector>

//using namespace std;

class cFuncionario
{
    private:
        //inícioVetorDinâmico
        //std::string  aListaNomeSalarioSexo[10][3];
        std::vector<std::string>vNome_Funcionario;
        std::vector<std::string>vSexo_Funcionario;
        std::vector<int>vSalario;
        //Variáveis Membros
        int sexo_masculino{0};
        int sexo_feminino{0};
        float tot_salario_Homens{0.0};
        float tot_salario_Mulheres{0.0};

    public:
        
        void SetListaFuncionariSalarioSexo(std::string nome, int salario, std::string sexo);
        void SetSexoFouM(std::string sexo_funcionario, float salario);
        float GetTotalSalarioPagoHomens();
        float GetTotalSalarioPagoMulheres(); 
        int GetQuantidadeDeMulheres();
        int GetQuantidadeDeHomens();
        void Lista();
        void LiberandoMemoria();

};


void cFuncionario::LiberandoMemoria()
{
  /*     while((vNome_Funcionario.empty() != NULL ) && (vSexo_Funcionario.empty() != NULL) && (vSalario.empty() != NULL))
 */ while((!vNome_Funcionario.empty()) || (!vSexo_Funcionario.empty()) || (!vSalario.empty()))
    {
        vNome_Funcionario.erase(vNome_Funcionario.begin(), vNome_Funcionario.begin() + vNome_Funcionario.size());
        vSexo_Funcionario.erase(vSexo_Funcionario.begin(), vSexo_Funcionario.begin() + vSexo_Funcionario.size());
        vSalario.erase(vSalario.begin(), vSalario.begin() + vSalario.size());
    }

    std::cout << "\n\n" <<vNome_Funcionario.size() << vSalario.size() << vSexo_Funcionario.size();   
    std::cout << "\n\nMemoria heap limpa\n";
    
} 

void cFuncionario::Lista()
{
    int i = 0;
    std::string texto{"\nLista nome e salario dos funcionarios"};
    std::printf("%s", texto.c_str()); 
    
    
    for(int i = 0; i < vNome_Funcionario.size();)
    {
        std::cout <<"Nome: " << vNome_Funcionario[i] <<" Salario: " <<vSalario[i];  
        i++;
    }

}

int cFuncionario::GetQuantidadeDeHomens()
{
    return sexo_masculino;
}

int cFuncionario::GetQuantidadeDeMulheres()
{
    return sexo_feminino;
}


void cFuncionario::SetListaFuncionariSalarioSexo(std::string novo_nome, int salario, std::string sexo)
{ 
    vNome_Funcionario.push_back(novo_nome);
    vSexo_Funcionario.push_back(sexo);
    SetSexoFouM(sexo, salario);
}


void cFuncionario::SetSexoFouM(std::string sexo_funcionario, float salario)
{

    if(sexo_funcionario == "masculino")
    {
        sexo_masculino++; 
        std::cout << "M"<< " " << sexo_masculino << "\n\n";
        vSalario.push_back(salario);
        tot_salario_Homens += salario;
    }
    //ELE NÃO ESTÁ EXECUNTANDO ESSA INSTRUÇÃO
    else if(sexo_funcionario.c_str() == "feminino")
    {
        sexo_feminino++;
        std::cout << "F" << "  " << sexo_feminino << "\n\n";
        vSalario.push_back(salario);
        tot_salario_Mulheres += salario;
    }
    sexo_funcionario = '\0';

}

float cFuncionario::GetTotalSalarioPagoHomens()
{
    return tot_salario_Homens;
}


float cFuncionario::GetTotalSalarioPagoMulheres()
{
    return tot_salario_Mulheres;
}
 


int main()
{

    cFuncionario oFuncionario;
    std::string aTexto[] = {"Digite o nome do funcionario", "\nDigite o salario: ", "\nDigite o sexo: "};
    std::string sexoDoFuncionario;
    std::string nome; 
    int salario{0};
    int resposta{0};

    for(int l = 0; l < 10; l++)
    {    
        std::cout << aTexto[0].c_str();
        //std::getline(std::cin, nome);      
        std::cin >> nome;
   
            
            std::cout << aTexto[1].c_str();
            std::cin >> salario;
        //std::getline(std::cin, salario);      
        
            
        std::cout << aTexto[2].c_str();
        std::cin >> sexoDoFuncionario;
            //std::getline(std::cin, entradaUsuario);      
            
          
        oFuncionario.SetListaFuncionariSalarioSexo(nome, salario, sexoDoFuncionario);
        std::cin.ignore();//ignorar dados armazenado no  buffer    

        std::cout << "Deseja add mais um funcionario?(sim = 1 | !não = 0)";
        std::cin >> resposta;

        if(resposta == 0)
        {
            break;
        }
        std::cin.ignore();
    }

    
    std::cout << "total do salario pago aos homens: " << oFuncionario.GetTotalSalarioPagoHomens();
    std::cout << "\ntotal do salairo pago as mulheres: " << oFuncionario.GetTotalSalarioPagoMulheres(); 
    std::cout << "\nTotal de Mulheres: " << oFuncionario.GetQuantidadeDeMulheres();
    std::cout << "\nTotal de Homens: " << oFuncionario.GetQuantidadeDeHomens();
    oFuncionario.Lista(); 
    oFuncionario.LiberandoMemoria(); 

    //std::cout << std::string(30, '*') << "\n";
    

    std::cin.ignore();
    std::cout << "\nPressione Enter para sair...";
    std::cin.get();
    return 0;
}

 

  • Obrigado 1
  • Solução
Postado

@LeonCode O problema na comparação de strings em C++ no seu código ocorre devido ao uso inadequado de c_str() na comparação de strings. A função c_str() retorna um ponteiro para um array de caracteres C-style, e compará-lo diretamente com uma string literal (como "feminino") não funciona como esperado. Para comparar strings em C++, deve-se usar o operador == diretamente entre objetos std::string.

  • Curtir 1
  • Obrigado 1

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!