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

ORDENAR STRINGS


PAULO VARGAS

Pergunta

Estou começando em C++ e estou com um problema para resolver um exercício: http://br.spoj.pl/problems/CHAMADA1/

Meu problema está em ordenar uma string de nomes. Exemplo: Amanda, Carlos, Miguel e etc.

Eu preciso ordenar os nomes em ordem alfabética.

Segue abaixo o meu código:

#include <iostream>
#include <algorithm>

using namespace std;


int main(){
    int n, k;

    cin>>n;
    cin>>k;

    if(k<1 || n>100 || k>n){return 0;}

    char nomes[n][21];

    for(int i=0; i<n; i++){
        cin>>nomes[i];
    }

     //FALTANDO ORDENAÇÃO AQUI
     
    cout<<nomes[k-1];
}

Editado por Durub
Adicionar tags code [kuroi] e remover caps lock [Durub]
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Opa, eu desenvolvi agora aqui, um exemplo em C, sobre ordenação de strings, Espero que te ajude.

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

struct dados {
   char  nome[30];
};

   int  main() {      
            
      dados vet[100];
      int op=0,soma=0,i,j;
      char temp[30];
                   
while(op!=3){
                  
      printf("\n==============MENU==================\n");            
      printf("1-Cadastrar Pessoa: \n");                    
      printf("2-Ordenar por Nome: \n");      
      printf("3-Sair\n\n\n");
      scanf("%d",&op);
     
      if(op==1){ 
      printf("informe nome:");
      fflush(stdin);   
      fgets(vet[soma].nome,30,stdin);
      fflush(stdin);                
      soma ++;
      system("cls");}
         
            
    if(op==2){
    printf("=================================\n");
    printf("Ordenando por nome");       
              
    //ordena
     for(i = 1; i < soma; i++){
         for (j = 0; j < soma-1; j++){
                       
              if(strcmp(vet[j].nome,vet[j+1].nome) > 0){
                strcpy(temp,vet[j].nome);
                 strcpy(vet[j].nome,vet[j+1].nome);
                 strcpy(vet[j+1].nome,temp);}                               
           }      
         }
                      
     //imprime                   
      for(i=0;i<soma;i++){ 
      printf("\n");   
      printf("nome = %s\n",vet[i].nome);}}
                     
    if(op==3){
    printf("Encerrando Programa...\n");
    system("pause");        
    exit(0);} 

  }// fim while
}// fim main

1) Criei uma struct(estruturas);

2) Declarei uma variavel do tipo dados vet[100]( é um vetor para armazenar até 100 nomes), e criei uma variável auxiliar chamada soma, que irá contar quantos nomes seu vetor possui até o momento.

3) A ordenação, utilizei dois "for", laço de repetição, onde tem dois índices "i" e "j", que compara sempre o nome "atual", com o próximo, até onde o vetor está preenchido(com a variavel soma), pois vamos supor que voce tem 3 registros apenas dentro do vetor, os laços de repetição irão de 0 até 3, e não até o final total

da sua capacidade(100). E uma maneira de otimizar seu código e deixá-lo mais leve.

4) Existem outras maneiras de ordenação de strings na internet: Radix sort, Bubble sort, etc..

Qualquer dúvida, poste ai!.

Editado por Binder
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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...