Консультация № 34922
07.02.2006, 12:03
0.00 руб.
0 10 10
Здравствуйте. Есть ли в Delphi функция или процедура
заменяющая символы в строке. Например мне надо в строке "-12.5" символ "." заменить на ‘‘,"

Как это возможно реализовать с помощью одной функции/процедуры?

Обсуждение

давно
Мастер-Эксперт
425
4118
07.02.2006, 12:20
общий
это ответ
Здравствуйте, Александр_10289!
Отчего же нету - есть. :)
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Заменяет в строке S подстроку OldPattern на NewPattern.
В Вашем случае можно сделать так:
var
s: string;
Begin
s:=‘12.5‘;
s:=StringReplace(S, ‘.‘, ‘,‘, rfReplaceAll);
End;
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
07.02.2006, 12:28
общий
это ответ
Здравствуйте, Александр_10289!

http://www.delphibasics.co.uk/RTL.asp?Name=StringReplace (тут и другие посмотри)

Существует функция StringReplace

function StringReplace ( const SourceString, OldPattern, NewPattern : string; Flags : TReplaceFlags ) : string;



Приложение:
s:=‘-12.5‘;s1:=StringReplace(s, ‘.‘, ‘,‘,[rfReplaceAll, rfIgnoreCase]);
Неизвестный
07.02.2006, 12:31
общий
это ответ
Здравствуйте, Александр_10289!
Легко:
uses StrUtils;
...
Str:=AnsiReplaceStr(Str,‘.‘,‘,‘);
Неизвестный
07.02.2006, 15:50
общий
это ответ
Здравствуйте, Александр_10289!
примерно так
s:=‘-12.5‘
pos(‘.‘, s) будет равно 4.
Неизвестный
07.02.2006, 16:30
общий
это ответ
Здравствуйте, Александр_10289!
Кроме библиотечных функций, можно делать так:

str:=‘-12.5‘;
i := Pos(‘.‘, str);
if i > 0 then
str[i] := ‘,‘;

Примерно так.
Неизвестный
07.02.2006, 16:34
общий
это ответ
Здравствуйте, Александр_10289!
Можно попробовать вот так:
var s:string;
begin
while pos(‘.‘,s)<>0 do
s[pos(‘.‘,s)]:=‘,‘
end.
Неизвестный
07.02.2006, 16:49
общий
это ответ
Здравствуйте, Александр_10289!
В приложении функция replace, которая делает то, что тебе нужно, и пример использования для строки ‘-12.5‘ (заменяем ‘.‘ на ‘,‘).

Приложение:
function replace (s:string; chto, nachto: char):string;var i:integer;beginresult:=s;for i:=1 to length(result) dobegin if result[i]=chto then result[i]:=nachto;end;end;procedure TForm1.XiButton1Click(Sender: TObject);var s:string;beginshowmessage (replace (‘-12.5‘,‘.‘,‘,‘));end;
Неизвестный
07.02.2006, 16:52
общий
это ответ
Здравствуйте, Александр_10289!
Вот я вам составил такую процедуру, т.к. в средствах языка это не предусмотрено.

var s,d: string;
i: integer;
begin
i:=1;
s:=‘-12.5‘;
while i<length(s)+1 do begin
if s[i]=‘.‘ then s[i]:=‘,‘;
write(s[i]);
i:=i+1;
end;
readln;
end.
Неизвестный
07.02.2006, 17:50
общий
это ответ
Здравствуйте, Александр_10289!
function ChangeSimvol(Str: String; Simvol: Char): String;
var i: Integer;
begin
Result := ‘‘;
for i := 1 to Length(Str) do
if Str[i] = Simvol then
Result := Result + Simvol
else
Result := Result + Str[i];
end;
Неизвестный
07.02.2006, 18:13
общий
это ответ
Здравствуйте, Александр_10289!
Есть такая партия! Пардон, способ:
procedure TForm1.Button1Click(Sender: TObject);
function ReplaceSub(str, sub1, sub2: String): String;
var
aPos: Integer;
rslt: String;
begin
aPos := Pos(sub1, str);
rslt := ‘‘;
while (aPos <> 0) do begin
rslt := rslt + Copy(str, 1, aPos - 1) + sub2;
Delete(str, 1, aPos + Length(sub1) - 1);
aPos := Pos(sub1, str);
end;
Result := rslt + str;
end;
begin
Edit1.Text := ReplaceSub(Edit1.Text, ‘.‘, ‘,‘);
end;
Форма ответа