Просмотр полной версии : Передвинуть символа в строке
Кто нибудь сталкивался с таким:
Вобщем допустим
в едит1 записано - 1101011110101110. Цель - в едит2 вводим допустим число 5
и у нас в едит3 должно получиться - 110101111010_1110
П.С. вместо 5-го символа должен вставиться любой символ/буква, главное чтобы отделить
П.П.С. чуть не забыл, желательно в дельфи )
fenixelite
30.03.2010, 22:27
Если правильно понял, то вот :
insert('_',edit1.Text,strtoint(Edit2.Text));
M_script_
30.03.2010, 22:33
AnsiString s = Edit1->Text;
int i = Edit2->Text.ToInt();
Edit3->Text = s.Insert("_", s.Length() - i + 2);
insert(pos('_')+8); примерно так
fenixelite
30.03.2010, 22:35
M_script_, просили в дельфи как бы...... :)))
Интерпретирую M_script
var s: String;
var i: Integer
begin
edit1.text := strtoint(edit2.text);
edit3.text := s.Insert("_", s.Length() - i + 2);
CyberHunter
30.03.2010, 22:45
На паскале так:
s:=11111
a:=' '
insert(a, s, 5)
Berman, сделал как ты сказал
var s: String;
var i: Integer
begin
edit1.text := strtoint(edit2.text);
edit3.text := s.Insert("_", s.Length() - i + 2);
что та ошибку выдает, могешь в кратце описать что делает что? )
Сделай как сказал CyberHunter, он определил.
M_script_
30.03.2010, 23:13
M_script_, просили в дельфи как бы...... :)))
Не совсем - "желательно в дельфи" ;)
fenixelite
30.03.2010, 23:16
Вот рабочий код :
s:=edt1.Text;
Insert('_',s,StrToInt(edt2.Text));
edt1.Text:=s;
Вкратце :
процедура Insert
1 параметр это то что вставляем.
2 - куда
3 - номер символа
Вот код для Delphi
procedure TForm1.Button1Click(Sender: TObject);
var
t, s, m: String;
begin
t:=Edit1.Text;
s:=Edit2.Text;
m:=Edit3.Text;
Insert(s,t,StrToInt(m));
Edit4.Text:=t;
end;
end.
где:
t-текст
s-символ
m-в каком месте
Теперь вопрос №2:
выше представлен код, в котором только 1 раз можно вставить символ в нужное место, а если предположим, что на месте 4, 6, 7 символа исходного текста вставить допустим тот же "_" символ
тебе вроде написали функцию та O_o
Insert('_',string,4);
Insert('_',string,6);
Insert('_',string,7);
---------
или тебе заменить нужно?
string[4]:='_';
string[6]:='_';
string[7]:='_';
в Edit2 вводить цифры через запятую.
var
j,i:integer;
m,s:string;
Paste:array[1..255] of integer;
begin
s:=Edit1.Text; { запоминаем текст}
m:=Edit2.text; {запоминает цифры}
m:=m+','; { добавляем , для парсинга}
for i:=1 to 255 do
begin
Paste[i]:=-1;
{заполняем массив -1}
if length(m)>0 then
{ если длина строки с цифрами > 0}
begin
Paste[i]:=strtoint(copy(m,1,pos(',',m)-1));
{ сохраняем значение}
delete(m,1,pos(',',m));
{удаляем, что сохранили }
end;
end;
j:=0; // Счетчик, который фиксирует баг с заменой
for i:=1 to 255 do
begin
if Paste[i]=-1 then break;
{если число в массиве -1 прекращаем цикл}
insert('_',S,Paste[i]+j);
{вставляем текст}
inc(j);
{увеличивываем позицию}
end;
Edit3.Text:=s;
{выводим результат}
Если с конца надо
замени:
insert('_',S,Paste[i]+j); на insert('_',S,length(s)-Paste[i]+j);
Что бы не заморачиваться, вот без массива.
procedure TForm1.Button1Click(Sender: TObject);
const
Delimiter=',';
Replacement='_';
var
I:integer;
Num,Str:string;
begin
Str:=edit1.text;
Num:=edit2.text+Delimiter;
I:=0; {новая позиция, с уже добавлеными символами}
While length(Num)>0 do
begin
insert(Replacement,Str,strtoint(copy(Num,1,pos(Del imiter,Num)-1))+I);
delete(Num,1,pos(Delimiter,Num));
inc(I);
end;
edit1.Text:=Str;
end;
Спасибо всем за ответы, выручили :)
+++ нажал ;)
Ребята, вот еще вопросик, как сделать чтобы не в начале перемещалось, а в конце?
M_script_
04.04.2010, 18:42
Что значит "не в начале, а в конце"?
ну т.е. если пользоваться кодом #17 то сдвиг идет слева-направо (с начала строки в конец строки) вотъ хотелось бы чтобы наоборот все осуществлялось.
Писал же:
Вместо:
insert('_',S,Paste[i]+j);
использовать:
insert('_',S,length(s)-Paste[i]+j);
Берем длину сообщения: length(s)
Вычитаем из нее нужное число: Paste[i]
добавляем сдвиг : j (это что бы не учитывались ранее вставленые _ )
Вот исправленый пример во 2 варианте:
procedure TForm1.Button1Click(Sender: TObject);
const
Delimiter=',';
Replacement='_';
var
I:integer;
Num,Str:string;
begin
Str:=edit1.text;
Num:=edit2.text+Delimiter;
I:=0; {новая позиция, с уже добавлеными символами}
While length(Num)>0 do
begin
insert(Replacement,Str,length(Str)-strtoint(copy(Num,1,pos(Del imiter,Num)-1))+I);
delete(Num,1,pos(Delimiter,Num));
inc(I);
end;
edit1.Text:=Str;
end;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot