| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
carlos_cd Novato

Registrado: Quinta-Feira, 29 de Mai de 2008 Mensagens: 12
|
Enviada: Ter Dez 30, 2014 1:45 pm Assunto: Ordenar array de string |
|
|
Ola a todos.
Estou precisando ordenar as linhas de uma array of string, mas não estou conseguindo.
Usei o método BubbleSort, mas ele ordena o indice da array e eu preciso ordenar o conteúdo de uma linha
Ex: 12 56 32 10 > 10 12 32 56
Desde já agradeço |
|
| Voltar ao Topo |
|
 |
anderbelluno Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011 Mensagens: 1030 Localização: Cianorte-PR
|
|
| Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Sáb Jan 03, 2015 9:44 am Assunto: |
|
|
pq não usa um stringlist?
e não entendi o ordenou o indice do array. como assim?
e pq não usa quicksort, mais simples e mt mais rápido. |
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Sáb Jan 03, 2015 11:42 am Assunto: |
|
|
O problema é que ele tem um array de string e cada string possui alguns numeros separados por espaços e ele que ordenar estes numeros contido em cada string.
A questao me parece ser bem facil, quando eu chegar em casa dou um help. _________________ Tudo podemos quando tudo sabemos! |
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Sáb Jan 03, 2015 12:43 pm Assunto: |
|
|
Bom como prometido ai vai o código
| Código: | function OrdeneStr(mask, txt: string): string;
var
num: array of integer;
a, b, tmp: integer;
begin
// convertendo uma string em array de integer
while length(txt) > 0 do
if pos(' ', txt) <> 0 then
begin
setlength(num, length(num) + 1);
num[high(num)] := strtoint(trim(copy(txt, 1, pos(' ', txt))));
delete(txt, 1, length(copy(txt, 1, pos(' ', txt))));
end
else if length(txt) > 0 then
begin
setlength(num, length(num) + 1);
num[high(num)] := strtoint(trim(txt));
txt := '';
end;
// ordenando o array integer
for a := Low(num) to High(num) do
for b := a + 1 to High(num) do
if num[a] > num[b] then
begin
tmp := num[a];
num[a] := num[b];
num[b] := tmp;
end;
// convertendo o array de integer em string
result := '';
for a := Low(num) to High(num) do
result := result + formatfloat(mask, num[a]);
end; |
Dos exemplo de uso
| Código: | procedure TForm1.Button1Click(Sender: TObject);
var
x: integer;
begin
for x := 0 to Memo1.Lines.Count - 1 do
Memo1.Lines.Strings[x] := OrdeneStr(' 00', Memo1.Lines.Strings[x]);
end; |
Nota:
1- Só usar OrdeneStr() se a string possui apenas números e espaços.
2- mask é uma formatação para os numero na nova string tal como no formatfloat.
Espero que lhe seja útil em algo :) _________________ Tudo podemos quando tudo sabemos! |
|
| Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
|
| Voltar ao Topo |
|
 |
|