![]() |
|
|
#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
|