![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
работа со строками
dracula © (2004-08-01 15:24:00)есть например такая строка (xxxxxxx\xxxxx/xxxxxxx) ну и т.д. как из неё убрать эти символы - / и \.
Alx2 (2004-08-02 07:36:00) [1]>Юрий Зотов © (01.08.04 16:44)
Может, я не прав. Но уже входит в классику использовать алгоритмы с квадратичной сложностью вместо линейной. Тем более, в очевидных случаях.
AndB (2004-08-02 06:14:00) [2]а почему не так:
s1 := 'xxxxx\xxxxx\xxxx\/xxx';
s1 :=AnsiReplaceStr(s1, '\','');
s1 :=AnsiReplaceStr(s1, '/','');
/* все-все, ухожу читать.. :) */
default (2004-08-01 20:22:00) [3]если важна скорость в общем случае пользуйся вторым вариантом
default (2004-08-01 20:20:00) [4]можно ещё так
type
TChars = Set of Char;
function DeleteChars(const S: String; Chars: TChars): String;
var
i, P, C: Cardinal;
begin
P := 1;
C := 0;
SetLength(Result, Length(S));
for i := 1 to Length(S) do
if S[i] in Chars then begin
Move(S[P], Result[P - C], i - P);
Inc(C);
P := i + 1;
end;
if P <= Length(S) then Move(S[P], Result[P - C], Length(S) - P + 1);
SetLength(Result, Length(Result) - C)
end;
function DeleteChars(const S: String; Chars: TChars): String;
var
i, P: Cardinal;
begin
P := 1;
SetLength(Result, Length(S));
for i := 1 to Length(S) do
if not (S[i] in Chars) then begin
Result[P] := S[i];
Inc(P);
end;
SetLength(Result, P - 1)
end;
я было подумал что с Move-ом будет заметно быстрее когда число символов между разделителями достаточно велико, но при таких условиях разница довольно мала так что если важна скорость пользуйся вторым вариантом
"Вот на примере я всё понял!!!"
и почему цикл наоборот сделан?
Anatoly Podgoretsky (2004-08-01 16:57:00) [5]Пример в [3] точно такой же рабочий, последний более универсальный. А читать надо!!!
Юрий Зотов (2004-08-01 16:57:00) [6]> dracula © (01.08.04 16:51) [11]
> а то Anatoly Podgoretsky меня читать заставлял то
> чего я понять немогу
Правильно заставлял. Иначе никогда и не поймете.
Ну ну (2004-08-01 16:56:00) [7]В Западной Европе российское высшее образование просто так не признаётся - теперь понятно почему:( Или в анкете лажа?
dracula (2004-08-01 16:51:00) [8]Anatoly Podgoretsky © - ладно тебе я в школе последний раз читал =) вот добрый человек написал мне - ЮРИЙ ЗОТОВ - супер, спасибо тебе, а то Anatoly Podgoretsky меня читать заставлял, то чего я понять немогу - садист(без обид). Вот на примере я всё понял!!! спасибо
Юрий Зотов (2004-08-01 16:44:00) [9]function DeleteChars(S: string; Chars: set of char): string;
var
i: integer;
begin
Result := S;
for i := Length(S) downto 1 do
if Result[i] in Chars then
Delete(Result, i, 1)
end;
========================
Edit1.Text := DeleteChars(S, ['\', '/']);
Anatoly Podgoretsky (2004-08-01 16:43:00) [10]Чмтай выше, не поможет - еще раз читай
dracula (2004-08-01 16:35:00) [11]всё может быть, хватит прикалываться. Anatoly Podgoretsky © - ты лучше подскажи как символы из строки string убрать. То что мне тут пишут я непонимаю (тупой), мне на примере всё показывать надо =).
Anatoly Podgoretsky (2004-08-01 16:06:00) [12]dracula © (01.08.04 16:00) [2]
может я не так спросил
dracula (2004-08-01 16:04:00) [13]Anatoly Podgoretsky
над этим вопросом я думал, а на счёт предыдущего стормозил извините.
dracula (2004-08-01 16:02:00) [14]щас попробую =)
Anatoly Podgoretsky (2004-08-01 16:02:00) [15]Это уже какой по счету вопрос про строки, когда ты не думаешь перед тем как задать.
Timedrops (2004-08-01 16:01:00) [16]function deletesubstr(substr,mainstr: string):string;
begin
while pos(substr,mainstr)<>0 do
delete(mainstr,pos(substr,mainstr),length(substr));
result:=mainstr;
end;
вот так попробуй
dracula (2004-08-01 16:00:00) [17]не совсем то что надо( хотя тоже можно применить), может я не так спросил - мне надо их не удалять, а сделать так чтобы они (/, \)не отображались например в Edit1.Text, а был только текст, причём местоположение этих знаков я незнаю, оно всегда разное. То что ты дал можно сделать, но может попроще чего есть?
Ну ну (2004-08-01 15:35:00) [18]function Pos(Substr: string; S: string): Integer;
procedure Delete(var S: string; Index, Count:Integer);