Ir para conteúdo
Fórum Script Brasil
  • 0

Ranking em C++


DiNhOo

Pergunta

Eu preciso fazer um programa em c++ que le um arquivo txt e depois as linhas e ordene elas por maior pontuação.

Arquivo original:

Fulano 10
Ciclano 30
Beltrano 90
João 78
Maria 19
O que eu quero que ele faça é isso: Beltrano 90 (Primeiro porque tem pontuação maior)
João 78 
Ciclano 30
Maria 19
Fulano 10 (Ultimo porque tem pontuação menor)
Ele nem precisa salvar o arquivo com as modificações (se for muito difícil não precisa) só ler e exibir as linhas organizadas (no programa mesmo). OBS: EU PRECISO MUITO MESMO DESSE PROGRAMA POR QUE FAZ PARTE DE UM TRABALHO QUE EU PRETENDO LEVA-LO PARA A FETESP. O que eu consigui fazer foi isso (mas ele so le o arquivo mas se ajudar ta ai):
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <conio.h>

int main()
{
   int pontuacao;
   std::string nome;
   std::string linha;
      
   std::ifstream in("ranking.txt", std::ios::in);
   if(!in) {
      std::cout << "Arquivo não encontrado - ranking.txt\n";
      std::cin.get();
      return 0;
   }

   while(std::getline(in, linha)) {
      std::istringstream iss(linha);
      iss >> nome >> pontuacao;
      std::cout << nome << std::endl;
      std::cout << pontuacao << std::endl; }
getch();
}

Muito obrigado mesmo.

Editado por Jonathan Queiroz
Remover palavra "ajuda" do título conforme regra 3.6 (Jonathan)
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

A dica que lhe dou é criar uma classe para armazenar o nome e o valor de cada linha. Depois usa um algoritmo pra ordenar os valores.

class ranking
{
     public:
          int pontuacao;
          std::string nome;
};
...
ranking vetor[MAX];
...
int i=0;
while(std::getline(in, linha)) {
      std::istringstream iss(linha);
      iss >> vetor[i].nome >> vetor[i].pontuacao;
      std::cout << nome << std::endl;
      std::cout << pontuacao << std::endl;
      i++;}
...

Essa parte armazena os valores do arquivo no vetor, depois tem que fazer o algoritmo de ordenação.

Não testei esse código, fiz de cabeça baseado no que você postou. Qualquer coisa posta ai.

Link para o comentário
Compartilhar em outros sites

  • 0

Ta tando erro =/

Segui suas dicas e fiz esse código:

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <conio.h>
#include <algorithm>

int main()
int i=0;
{
class ranking
{
     public:
          int pontuacao;
          std::string nome;
};
...
ranking vetor[MAX];
...
while(std::getline(in, linha)) {
      std::istringstream iss(linha);
      iss >> vetor[i].nome >> vetor[i].pontuacao;
      std::cout << nome << std::endl;
      std::cout << pontuacao << std::endl;
      i++;}
getch();
}

Mas ta dando os seguintes erros:

17 D:\Projetos\C++\NUMERAX\Sem Título1.cpp expected primary-expression before '...' token

17 D:\Projetos\C++\NUMERAX\Sem Título1.cpp expected `;' before '...' token

19 D:\Projetos\C++\NUMERAX\Sem Título1.cpp expected primary-expression before '...' token

19 D:\Projetos\C++\NUMERAX\Sem Título1.cpp expected `;' before '...' token

21 D:\Projetos\C++\NUMERAX\Sem Título1.cpp `in' undeclared (first use this function)

21 D:\Projetos\C++\NUMERAX\Sem Título1.cpp `linha' undeclared (first use this function)

23 D:\Projetos\C++\NUMERAX\Sem Título1.cpp `vetor' undeclared (first use this function)

24 D:\Projetos\C++\NUMERAX\Sem Título1.cpp `nome' undeclared (first use this function)

25 D:\Projetos\C++\NUMERAX\Sem Título1.cpp `pontuacao' undeclared (first use this function)

Obs: Meu compilador é o Dev-C++

Poderia corrigir o codigo pra mim porfavor?

Link para o comentário
Compartilhar em outros sites

  • 0

Não deu certo.

Eu achei outra forma:

#include <iostream>

#include <map>

#include <vector>

#include <string>

#include <algorithm>

#include <conio.h>

#include <fstream>

#include <sstream>

using namespace std;

class sort_map

{

public:

string key;

string val;

sort_map(string iKey, string iVal);

};

bool Sort_by(const sort_map& a ,const sort_map& B)

{

return a.val < b.val;

}

int main()

{

map<string,string> d;

map<string,string>::iterator it;

vector< sort_map > v;

vector< sort_map >::iterator itv;

sort_map sm;

std::string nome;

std::string pontos;

std::string linha;

std::ifstream in("ranking.txt", std::ios::in);

while(std::getline(in, linha)) {

std::istringstream iss(linha);

iss >> nome >> pontos;

sort_map *A = new sort_map::sort_map(nome, pontos);

}

for (it = d.begin(); it != d.end(); ++it)

{

sm.key = (*it).first; sm.val = (*it).second;

v.push_back(sm);

}

for (itv = v.begin(); itv != v.end(); ++itv)

{

cout << (*itv).key << " : " << (*itv).val << endl;

}

sort(v.begin(),v.end(),Sort_by);

cout << "sorted" << endl;

for (itv = v.begin(); itv != v.end(); ++itv)

{

cout << (*itv).key << " : " << (*itv).val << endl;

}

getch();

}

Mas ta dando esse erro:

31 D:\Projetos\C++\NUMERAX\uio.cpp no matching function for call to `sort_map::sort_map()'

E eu já tentei de tudo e não consigo consetar. O que esta errado?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...