question

C codigo para classificar nomes em ordem alfabetica?

Preciso classificar n nomes em ordem alfabética usando strcmp e é suposto para ser diferencia maiúsculas de minúsculas.

Aqui está o que eu tenho até agora:

/ código para classificar nomes em ordem alfabética e imprimir nomes pelo menos três cartas de repetição /
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main)
{
int x, i, j, n;
nome Char [20] [15]; / até 20 nomes, até 15 caracteres cada tempo /
temp Char [20];
fazer
{
printf ("Quantos nomes? \n");
scanf ("%d", &n);
se (n > 20)
printf ("número máximo de nomes é 20. Tente novamente. \n ");
} enquanto (n > 20);
para (x = 0; x<n; x++)=""></n;>
{
printf ("digite nome: \n");
scanf ("%s", name[x]);
}
para (eu = 0; eu<n-1; i++)=""></n-1;>
{
para (j = i + 1; j<n; j++)=""></n;>
{
se (strcmp (nome [i], name[j])>0)
{
strcpy(temp,Name[i]);
strcpy(Name[i],Name[i+1]);
strcpy(Name[i+1],Temp);
}
}
}
para (eu = 0; eu<n; i++)=""></n;>
{
printf ("\n%s\n", name[i]);
}
}

Só funciona algumas vezes. Alguém pode ajudar com isso? Eu realmente não estou entendendo por que não está funcionando.</ctype.h></string.h></stdio.h>
resposta Resposta
Na verdade, Peter H tem-lo exatamente errado e você (OP) tem direito.

        nome Char [20] [15];

É lido pelo compilador C como: char (name[20]) [15];

ou, (nome) nome é (name[20]) uma matriz de 20 de ((name[20]) [15]) uma matriz de 15 do char ((name[20]) [15]);        Char que é esse nome é uma matriz de 20 de uma matriz de 15 caracteres. Então, você tem 20 cadeias de caracteres de não mais do que 15 bytes totais (incluindo '0' no final para cadeias de caracteres C.)

Se alguém precisar de prova disso, por si, tentar passar essa matriz para uma função e ver o que é necessário da declaração de parâmetro de função para o parâmetro matriz passado. (Ou tentar a criação de uma matriz inicializada e ver o que acontece). Se isso não chegar ao ponto do outro lado, nada o fará.

-De qualquer forma, aqui está seu código para você: #include <stdio.h>#include <string.h>int main (void) {int x, i, j, n;     nome Char [20] [15]; / até 20 nomes, até 14 caracteres cada tempo / char temp [15]; / temp não precisa permitir que mais de 14, também / for (;) {printf ("Quantos nomes? \n");         scanf ("%d", & n);         if ( n <= 20="" )="" break;=""  =""  =""  =""  ="" printf(="" "max="" number="" of="" names="" is="" 20.="" try="" again.\n"="" );=""  =""  ="" }=""  =""  ="" for="" (="" x="0;" x=""></=>< n;="" x++="" )="" {=""  =""  =""  =""  ="" printf(="" "enter="" name:\n"="" );=""  =""  =""  =""  ="" scanf(="" "%s",="" name[x]="" );="" dangerous!="" /=""  =""  ="" }=""  =""  ="" for="" (="" i="0;" i="">< n-1;="" i++)="" {=""  =""  =""  =""  ="" int="" k="i;"  =""  =""  =""  ="" for="" (j="i+1;" j="">< n;="" j++="" )=""  =""  =""  =""  =""  =""  ="" if="" (="" strcmp(="" name[k],="" name[j]="" )=""> 0 ) k= j;         se (k! = i) {strcpy (nome temporário, [i]);             strcpy (nome [i], nome [k]);             strcpy (nome [k], temp);         }     }     for ( i= 0; i < n; i++ )         printf( "\n%s\n", name[i] );     return 0; }

Note that you can only put in 14 characters, because your arrays are limited to 15 bytes total and a string requires a \0 at the end of it. So you only have 14 left. n;="" i++="" )=""  =""  =""  =""  ="" printf(="" "\n%s\n",="" name[i]="" );=""  =""  ="" return="" 0;="" }="" note="" that="" you="" can="" only="" put="" in="" 14="" characters,="" because="" your="" arrays="" are="" limited="" to="" 15="" bytes="" total="" and="" a="" string="" requires="" a="" \0="" at="" the="" end="" of="" it.="" so="" you="" only="" have="" 14=""></ n; i++ )         printf( "\n%s\n", name[i] );     return 0; }

Note that you can only put in 14 characters, because your arrays are limited to 15 bytes total and a string requires a \0 at the end of it. So you only have 14 left.></string.h></stdio.h>

ComentáriosComentários
Acho que a resposta não está correta ou que você gostaria de acrescentar mais
alguma informação? Envie o seu comentário abaixo..

Guest


HTML não é permitido!

Image Code

Digite os caracteres que aparecem na imagem por isso sabemos que você é humano!

Receber um email quando alguém acrescenta outro comentário a esta pergunta


Topo da página


Home  Terms
Copyright © Accelerated Ideas 2005-2024
All rights reserved