Ir ao conteúdo
  • Cadastre-se
marcoctis

C++ Programação faculdade linguagem C++

Recommended Posts

bom dia, estou com uma dificuldade no programa que estou fazendo pois  tenho que lista os nomes digitados em ordem alfabética e com a quantidade de letras correspondente, só que se eu colocar avila , ávila, beatriz, maria das graças. na exibição vai ficar assim : avila, beatriz, maria, das graça, ávila . maria das graças foca separada como se fosse dois nomes diferentes. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem ver o código só posso sugerir que seja um problema em como você está lendo os dados digitados pelo usuário, está guardando cada palavra separadamente ao invés de guardar a frase inteira incluindo os espaços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@marcoctis Prefiro não baixar arquivos anexados. Poste como texto aqui no fórum (leia minha assinatura abaixo para ver como).

Compartilhar este post


Link para o post
Compartilhar em outros sites

# include <iostream>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
using namespace std;

int main()
{
    //Criacao das variaveis
    int qtdNomes;
    int i, j;
    
    /*
        Área que o usuário entra com os dados
        endl: comando que pula linha
        cout <<: exibe texto na tela
        cin >> armazena o dado informado pelo teclado em uma variavel específica
    */
    cout << "Entre com a quantidade de nomes que deverao ser exibidos(entre 5 e 10):" << endl;
    cin >> qtdNomes;
    
    cout << "\n\n";
    
    //criação dos vetores necessários, o tamanho do vetor de nomes é baseado na quantidade desejada digitada pelo usuário logo acima
    char vetorNomes[qtdNomes][100], copia[100];
    
    //laço de repeticao para armazenamento dos nomes no vetor, de acordo com a quantidade digitada pelo usuário
    for(i = 0; i < qtdNomes; i++)
    {
        cout << "Informe o " << i + 1 << "o nome: ";
        cin >> vetorNomes;
    }
    
    //algoritmo de ordenação em ordem alfabética
    for(i = 0; i < (qtdNomes - 1); i++)
    {
        for(j = i + 1; j < qtdNomes; j++)
        {
            if(strcmp(vetorNomes, vetorNomes[j]) > 0) 
            {
                strcpy(copia, vetorNomes);
                strcpy(vetorNomes, vetorNomes[j]);
                strcpy(vetorNomes[j], copia);
            }
        }
    }
    
    cout << "\n";
    cout << "###############################\n";
    cout << "##### EXIBICAO DOS NOMES ######\n";
    cout << "###############################\n\n";
    
    /*
        laço de repetição para "Varrer" o vetor para apresentar os nomes digitados
        strlen: função que retorna a quantidade de letras de uma string
    */
    for(i = 0; i < qtdNomes; i++)
    {
        cout << "Nome: " << vetorNomes << " - " << strlen(vetorNomes) << " letras" << "\n";
    }
    
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para o fórum [ i ] sem espaços é a tag para deixar o texto em itálico, então todos os [ i ] do seu código sumiram e o texto está em itálico a partir do primeiro lugar onde deveria estar um [ i ]. Para evitar que este tipo de problema aconteça use o botão < > Code para postar códigos no fórum, como mencionado na minha assinatura.

 

E o problema está aqui:

    //laço de repeticao para armazenamento dos nomes no vetor, de acordo com a quantidade digitada pelo usuário
    for(i = 0; i < qtdNomes; i++)
    {
        cout << "Informe o " << i + 1 << "o nome: ";
        cin >> vetorNomes;
    }

 

Mude para:

    //laço de repeticao para armazenamento dos nomes no vetor, de acordo com a quantidade digitada pelo usuário
    for(i = 0; i < qtdNomes; i++)
    {
        cout << "Informe o " << i + 1 << "o nome: ";
        cin.getline(vetorNomes[i], sizeof(vetorNomes[0])); // sizeof(vetorNomes[0]) = 100
    }

 

Para ler a linha inteira ao invés de 1 única palavra.

 

 

E tem algum motivo pelo qual você está usando vetor/matriz de char ao invés de string?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo usando string:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string frase[2];
    
    getline(cin, frase[0]);
    getline(cin, frase[1]);
    
    cout << "\n";
    cout << frase[0] << "\n";
    cout << frase[1] << "\n";
    
    //Usando string pode fazer atribuição:
    frase[0] = frase[1];
    
    cout << frase[0] << endl;
    
    return 0;
}

Assim não fica limitado o número de caracteres e também pode fazer atribuição para copiar a string.

 

 

Eu também recomendo não misturar colocando essas bibliotecas do C em programas em C++:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Use os recursos do C++ quando programa em C++.

  • Curtir 1

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





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

×