![]() |
|
#1
|
||||
|
||||
![]() Помогите разделить строки из edit на слова, скопировать их в ячейки массива строк, там сравнить и вывести упорядоченно в другой edit
Вот, то что смог навоять(turbo delphi 2006): Код:
{разделение на слова строки из edit и занесение слова в одну ячейку массива} procedure TForm1.Razdelenie(Sender: TObject); var mas:array[0..100]of string; i,u,kon:integer; s,s1:string; begin s:=edit1.text; kon:=Length(s); i:=1; u:=0; for i:=1 to kon do if s[i]=' ' then begin s1:=copy(s,i,i-1); mas[u]:=s1; inc(u); end; edit1.Text:=s; FOR u:=0 to 100 do mas[u]:=stringgrid1[u]; end; {сравнение ячеек в массиве и вывод слов по кол-ву символов в edit в порядке убывания} procedure TForm1.Sortirovka(Sender: TObject); var mas:array[0..100]of string; i,n,change:integer; begin i:=0; n:=100; change:=1; FOR i:=0 to 100 do begin StringGrid1.Cells[i]:=mas[i]; end; while change>0 do begin change:=0; i:=1; while i<n do if mas[i]>mas[n] then begin edit2.Text:=s; s[i]:=s[i+1]; s[i+1]:=buf; inc(change); end else inc(i); end; s:=s+mas[i]; edit2.Text:=s; end; ![]() |
#2
|
||||
|
||||
![]() Чтобы не углублятся в поиск ошибки, скажи что не выходит или что неверно работает???
В начале был Бит, потом Байт и только потом появилось Слово... |
#3
|
||||
|
||||
![]() Все это можно сделать намного проще если воспользоваться стандартным классом TStringList.
Код:
procedure TForm1.Edit1Change(Sender: TObject); Var L: TStringList; begin L := TStringList.Create; L.Sorted := True; L.Text := StringReplace(Edit1.Text,' ',#13,[rfReplaceAll]); Edit2.Text := StringReplace(L.Text,#13#10,' ',[rfReplaceAll]); L.Free; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
||||
|
||||
![]() Страдалецъ, как-то странно он сортирует. Мне надо по убыванию длины слова. Да и класс TstringList на информатике не затрагивали, придется обьяснять преподавателю как я это сделал. Только работать с массивом и сравнивать ячейки.
У меня не получается выделить слово и скопировать ну или переместить его в ячейку Последний раз редактировалось virgin34, 13.05.2010 в 18:56. |
#5
|
||||
|
||||
![]() Помогите здесь разобраться, где if mas[i]>mas[i+1] then происходит неправильное сравнение длины строк ячеек в массиве строк. Ячейки в массиве уже заполнены:1)дома 2)я 3)был. В итоге чтобы в edit слова разместились в порядке убывания длины слова.
Код:
procedure TForm1.RastanovkaSlov(Sender: TObject); var mas:array[0..100]of string; s:string; i,n,change:integer; begin n:=4; change:=1; for i:=0 to 4 do mas[i]:=stringgrid1.Cells[i,0]; while change>0 do begin change:=0; i:=0; while i<n do if mas[i]>mas[i+1] then begin s:=mas[i]+' '; mas[i]:=mas[i+1]; mas[i+1]:=s; inc(change); end else inc(i); end; for i:=0 to 100 do begin s:=s+mas[i]; end; edit2.Text:=s; end; Последний раз редактировалось virgin34, 13.05.2010 в 18:58. |
#6
|
||||
|
||||
![]() Тогда тебе надо сравнивать не сами слова, а их длину Length(<слово №I>) > Length(<слово №I+1>)
|
#7
|
||||
|
||||
![]() помогло, спасибо!
Вот еще здесь не могу разобраться, разделить edit на слова и скопировать их по одному в каждую ячейку, не могу понять как задать начало слова для нахождения длины слова в функции copy,(k-n) гдк к-конец слова и n начало Код:
procedure TForm1.Button2Click(Sender: TObject); var mas:array[0..100]of string; i,u,kon,change:integer; s,s1:string; n,k:integer; //начало и конец слова begin s:=edit1.text; kon:=Length(s); n:=1; u:=0; for i:=0 to kon do if s[i]=' ' then begin k:=i; s1:=copy(s,1,k-n); mas[u]:=s1; change:=1; inc(u); if change=1 then break end; for i:=0 to kon do if s[i]=' ' then begin change:=1; if change=1 then break end; //n:=i; for i:=i to kon do begin if n=0 then n:=i else begin k:=i; s1:=copy(s,i-1,k-n); n:=0; mas[u]:=s1; inc(u); end; end; edit1.Text:=s; for u:=0 to 100 do begin StringGrid1.Cells[u,0]:=mas[u]; end; end; |
#8
|
|||
|
|||
![]() тебе надо не вычислять априори начало и конец слова, а вырезать их поочереди по пробелу.
Код:
var M : Array Of String; S : Strng; Idx : Integer; begin SetLength(M,0); S := 'любая строка, наример полученная из Edit.Text'; Idx := Pos(' ',S); While Idx > 0 Do Begin SetLength(M,Length(M)+1); M[High(M)] := Copy(S,1,Idx-1); S := Copy(S,Idx+1,Length(S)); Idx := Pos(' ',S); End; SetLength(M,Length(M)+1); M[High(M)] := S; end; |
#9
|
||||
|
||||
![]() если еще нужно разделение строки.rar
|