Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Передвинуть символа в строке (https://forum.antichat.xyz/showthread.php?t=191934)

Ss[x]dD 30.03.2010 22:00

Передвинуть символа в строке
 
Кто нибудь сталкивался с таким:

Вобщем допустим
в едит1 записано - 1101011110101110. Цель - в едит2 вводим допустим число 5
и у нас в едит3 должно получиться - 110101111010_1110

П.С. вместо 5-го символа должен вставиться любой символ/буква, главное чтобы отделить

П.П.С. чуть не забыл, желательно в дельфи )

Berman 30.03.2010 22:19

Сейчас накатаю 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);

Berman 30.03.2010 22:34

insert(pos('_')+8); примерно так

fenixelite 30.03.2010 22:35

M_script_, просили в дельфи как бы...... :)))

Berman 30.03.2010 22:39

Интерпретирую 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)


Ss[x]dD 30.03.2010 23:02

Berman, сделал как ты сказал

var s: String;
var i: Integer
begin
edit1.text := strtoint(edit2.text);
edit3.text := s.Insert("_", s.Length() - i + 2);

что та ошибку выдает, могешь в кратце описать что делает что? )

Berman 30.03.2010 23:12

Сделай как сказал CyberHunter, он определил.

M_script_ 30.03.2010 23:13

Цитата:

Сообщение от fenixelite
M_script_, просили в дельфи как бы...... :)))

Не совсем - "желательно в дельфи" ;)

fenixelite 30.03.2010 23:16

Вот рабочий код :
Код:


s:=edt1.Text;
 Insert('_',s,StrToInt(edt2.Text));
 edt1.Text:=s;

Вкратце :
процедура Insert
1 параметр это то что вставляем.
2 - куда
3 - номер символа

Ss[x]dD 30.03.2010 23:32

Вот код для 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-в каком месте

Ss[x]dD 30.03.2010 23:40

Теперь вопрос №2:
выше представлен код, в котором только 1 раз можно вставить символ в нужное место, а если предположим, что на месте 4, 6, 7 символа исходного текста вставить допустим тот же "_" символ

edge911 31.03.2010 00:55

тебе вроде написали функцию та O_o
Insert('_',string,4);
Insert('_',string,6);
Insert('_',string,7);
---------
или тебе заменить нужно?
string[4]:='_';
string[6]:='_';
string[7]:='_';

JnK 31.03.2010 01:19

в Edit2 вводить цифры через запятую.
PHP код:

var
  
j,i:integer;
  
m,s:string;
  
Paste:array[1..255of 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);

JnK 31.03.2010 01:42

Что бы не заморачиваться, вот без массива.
Код:

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(Delimiter,Num)-1))+I);
    delete(Num,1,pos(Delimiter,Num));
    inc(I);
  end;
  edit1.Text:=Str;
end;


Ss[x]dD 31.03.2010 07:45

PHP код:

Спасибо всем за ответывыручили  :) 
  +++ 
нажал  ;) 


Ss[x]dD 04.04.2010 18:39

Ребята, вот еще вопросик, как сделать чтобы не в начале перемещалось, а в конце?

M_script_ 04.04.2010 18:42

Что значит "не в начале, а в конце"?

Ss[x]dD 04.04.2010 18:50

ну т.е. если пользоваться кодом #17 то сдвиг идет слева-направо (с начала строки в конец строки) вотъ хотелось бы чтобы наоборот все осуществлялось.

JnK 04.04.2010 19:36

Писал же:
Вместо:
insert('_',S,Paste[i]+j);
использовать:
insert('_',S,length(s)-Paste[i]+j);

Берем длину сообщения: length(s)
Вычитаем из нее нужное число: Paste[i]
добавляем сдвиг : j (это что бы не учитывались ранее вставленые _ )

Вот исправленый пример во 2 варианте:
PHP код:

procedure TForm1.Button1Click(SenderTObject);
const
  
Delimiter=',';
  
Replacement='_';
var
  
I:integer;
  
Num,Str:string;
begin
  Str
:=edit1.text;
  
Num:=edit2.text+Delimiter;
  
I:=0; {новая позицияс уже добавлеными символами}
  While 
length(Num)>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



Время: 05:25