Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Delphi. Строки. Почему не срабатывает программа.

Николай Задорожный Ученик (51), закрыт 7 лет назад
Вводится три слова. Программа должна поменять местами второе и третье. В моей программе почему-то третье слово переходит в начало, с другими словами вообще ничего не происходит...
procedure cd(var y,s1:string);
begin
y:=copy(s1,1,pos(' ',s1));
delete(s1,1,pos(' ',s1));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s,m,n,z:string;
begin
s:=Edit1.text;
cd(m,s);
cd(n,s);
cd(z,s);
edit1.text:=s;
end;

end.
Лучший ответ
Евгений Гуру (3081) 7 лет назад
function replace_2_3(s:string):string;
{меняет местами в s 2-е и 3-е слово, признак разделение слов " "
при условии, что они есть
}
var p2,p3,p4:integer;
begin
Result:= s;
p2:= Pos(' ',s);
if p2 > 0 then begin
p3:= PosEx(' ',s, p2+1);
if (p3>0) and (Length(s) > p3) then begin
p4:= PosEx(' ',s, p3+1);
if p4 = 0 then
p4:= Length(s)
else
Dec(p4);

result:= Copy(s,1,p2);
result:= result + Copy(s,p3+1,p4-p3);
result:= result + ' '+ Copy(s,p2+1,p3-p2-1);
if p4 <> Length(s) then
result:= result + Copy(s,p4+1,Length(s));

end;
end;
end;

function replace_2_3_ver2(s:string):string;
{меняет местами в s 2-е и 3-е слово, признак разделение слов " "
при условии, что они есть
}
var sl:TstringList;
begin
Result:= s;
sl:= TStringList.Create;
try
sl.Delimiter:= ' ';
sl.DelimitedText:= s;
if (sl.Count > 2) and (sl[2] <> '') and (sl[3] <> '') then begin
result:= sl[2];
sl[2]:= sl[1];
sl[1]:= Result;
Result:= sl.DelimitedText;
end;
finally
sl.free
end;

end;

procedure TForm1.btn1Click(Sender: TObject);
begin
edt1.Text:= replace_2_3(edt1.Text);
//edt1.Text:= replace_2_3_ver2(edt1.Text);
end;
Остальные ответы
федя рашпиль Профи (529) 7 лет назад
вроде все правильно не знаю
johnsilver Просветленный (22490) 7 лет назад
edit1.text:=s;
вот тут неправильно. в эдит вставляешь огрызок
Николай ЗадорожныйУченик (51) 7 лет назад
А что надо?
johnsilver Просветленный (22490) а код кто писал? ты 1, 2 и 3-е слова куда получаешь? вот их надо и скомбинировать
Максим Профи (501) 7 лет назад
а другие слова остаются? или только первое?
Volk_ _Odino4ka Ученик (209) 7 лет назад
Я хз, но раньше создавал винлоки
Саша Пинтеев Знаток (271) 7 лет назад
Я немного подправил:
function replace_2_3(s:string):string;
{меняет местами в s 2-е и 3-е слово, признак разделение слов " "
при условии, что они есть
}
var p2,p3,p4:integer;
begin
Result:= s;
p2:= Pos(' ',s);
if p2 > 0 then begin
p3:= PosEx(' ',s, p2+1);
if (p3>0) and (Length(s) > p3) then begin
p4:= PosEx(' ',s, p3+1);
if p4 = 0 then
p4:= Length(s)
else
Dec(p4);

result:= Copy(s,1,p2);
result:= result + Copy(s,p3+1,p4-p3);
result:= result + ' '+ Copy(s,p2+1,p3-p2-1);
if p4 <> Length(s) then
result:= result + Copy(s,p4+1,Length(s));

end;
end;
end;

function replace_2_3_ver2(s:string):string;
{меняет местами в s 2-е и 3-е слово, признак разделение слов " "
при условии, что они есть
}
var sl:TstringList;
begin
Result:= s;
sl:= TStringList.Create;
try
sl.Delimiter:= ' ';
sl.DelimitedText:= s;
if (sl.Count > 2) and (sl[2] <> '') and (sl[3] <> '') then begin
result:= sl[2];
sl[2]:= sl[1];
sl[1]:= Result;
Result:= sl.DelimitedText;
end;
finally
sl.free
end;

end;

procedure TForm1.btn1Click(Sender: TObject);
begin
edt1.Text:= replace_2_3(edt1.Text);
//edt1.Text:= replace_2_3_ver2(edt1.Text);
end;
Похожие вопросы