![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Нужна ваша помощь. У меня есть кусочек программы, которая при вводе нашего текста считает количество каждой буквы и выводит. Мне нужно сортировать это по убыванию. и еще при подсчете не учитывать строчную и заглавную букву.
Код:
var Form1: TForm1; k:string; a:char; //символ b:integer;//кол-во символа "a" в строке c:integer;//количество различных символов implementation {$R *.dfm} procedure clear; begin Form1.StringGrid1.Cols[1].Clear; Form1.StringGrid1.Cols[2].Clear; Form1.StringGrid1.RowCount:=1; b:=0; c:=0; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin clear; Form1.StringGrid1.Cells[0,c]:='Символ'; Form1.StringGrid1.Cells[1,c]:='Количество'; k:=Edit1.Text; while Length(k)<>0 do begin inc(c); a:=k[1];; b:=1; for i := 2 to Length(k) do if k[i]=a then inc(b); k:=StringReplace(k,a,'', [rfReplaceAll]); Form1.StringGrid1.Cells[0,c]:='"'+a+'"'; Form1.StringGrid1.Cells[1,c]:=IntToStr(b); end; Form1.StringGrid1.RowCount:=c+1; end; end. Последний раз редактировалось lmikle, 21.06.2015 в 19:05. |
#2
|
|||
|
|||
![]() Тебе английские нужны, русские или вообще все?
Для приведения всех букв к одному регистру можно воспользоваться функцией AnsiLowerCase. |
#3
|
||||
|
||||
![]() 1) Построить массив количеств по первым байтам символов. Явно школьная задачка, потому пропускаю случай с не-ASCII символами, иероглифами и прочим UTF:
Код:
counts: array[0..255] of integer; ... s := AnsiLowerCase(Edit.Text); for i := 1 to length(s) do inc(counts[byte(s[i])]); Код:
indexes: array [0..255] of byte; ... for i := 0 to 255 do indexes[i] := i; Sort(indexes, counts); // <- пузырьковую сортировку нагуглить и подправить jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 21.06.2015 в 21:28. |
#4
|
||||
|
||||
![]() Доработка процедуры из первого поста, правда извнс, вероятно получился G-код
Код:
procedure TForm1.Button1Click(Sender: TObject); var i, m, r: integer; buf: array[0..1] of string; begin StringGrid1.RowCount:= 1; StringGrid1.Cells[0, 0]:= 'Символ'; StringGrid1.Cells[1, 0]:= 'Количество'; k:= AnsiLowerCase(Edit1.Text); c:= 1; while Length(k) <> 0 do begin a:= k[1];; b:= 1; for i := 2 to Length(k) do if k[i] = a then inc(b); k:= StringReplace(k, a, '', [rfReplaceAll]); StringGrid1.Cells[0, c]:= '"' + a + '"'; StringGrid1.Cells[1, c]:= IntToStr(b); inc(c); StringGrid1.RowCount:= c; end; for r := 1 to StringGrid1.RowCount - 1 do begin m:= r; for i := r to StringGrid1.RowCount - 1 do if StrToInt(StringGrid1.Cells[1,i]) > StrToInt(StringGrid1.Cells[1,m]) then m := i; if r <> m then begin for c := 0 to 1 do begin buf[c]:= StringGrid1.Cells[c, r]; StringGrid1.Cells[c, r]:= StringGrid1.Cells[c, m]; StringGrid1.Cells[c, m]:= buf[c]; end; end; end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
||||
|
||||
![]() Я тебе вчера в другом месте пример оставил. А в ответ - тишина. Неужели подошло as is?
Хей-хей-хей! Только не ходите в мой сарай, лады?.. |
#6
|
||||
|
||||
![]() Цитата:
![]() — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |