Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2015, 21:54   #1
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию Вставка символов через равные промежутки

Добрый день!
Как через каждый 2 символа вставлять "-"?
nibufep вне форума Ответить с цитированием
Старый 01.07.2015, 22:47   #2
disbnt
Пользователь
 
Регистрация: 18.09.2014
Сообщений: 32
По умолчанию

Код:
//  Возвращает переделанную строку
//  simvol - текст который нужно вставить
//  stroka - текст в который нужно вставить
//  n - отступ вставки

function insert_text(simvol,stroka : string;n : integer):string;
var
  i,len,kol,sim : integer;
begin
  len := length(stroka);
  sim := length(simvol);
  if len >= n then begin
    kol :=  trunc(len/n);
    for i := 0 to kol-1 do insert(simvol,stroka,n*i+n+1+(i*(sim)));
  end;
  result := stroka;
end;

//  Пример

showmessage(showmessage(insert_text('-','123456783hksdfb',2));
disbnt вне форума Ответить с цитированием
Старый 02.07.2015, 10:26   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Можно несколько упростить подсчёт позиции, если двигаться с конца.
Код:
function insert_text(simvol,stroka : string;n : integer):string;
var
  pos, dpos : integer;
begin
  dpos := length(stroka) mod n;
  pos := length(stroka) - dpos + 1;
  while pos > n do begin
    insert(simvol, stroka, pos);
    dec(pos, n);
  end;
  result := stroka;
end;
eoln вне форума Ответить с цитированием
Старый 03.07.2015, 20:57   #4
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

а почему в конце тоже ставится символ?
Например:

4444-4444-4444-4444-
а нужно так:
4444-4444-4444-4444
nibufep вне форума Ответить с цитированием
Старый 03.07.2015, 21:12   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от nibufep Посмотреть сообщение
а почему в конце тоже ставится символ?
4444-4444-4444-4444-
а нужно так:
4444-4444-4444-4444
потому что
Цитата:
Сообщение от nibufep Посмотреть сообщение
через каждый
Впрочем, ежели тебе того не надо, то я не против
eoln вне форума Ответить с цитированием
Старый 04.07.2015, 10:04   #6
disbnt
Пользователь
 
Регистрация: 18.09.2014
Сообщений: 32
По умолчанию

Цитата:
Сообщение от nibufep Посмотреть сообщение
а почему в конце тоже ставится символ?
Например:

4444-4444-4444-4444-
а нужно так:
4444-4444-4444-4444
В конце ставится символ потому что ты написал (Как через каждый 2 символа вставлять "-"?) , если не нужно в конце символа то сделай проверку и если он там удаляй его.

Код:
b := copy(stroka,length(stroka)-(sim-1),sim);
if b = simvol then delete(stroka,length(stroka)-(sim-1),sim);
Код:
function insert_text(simvol,stroka : string;n : integer):string;
var
  i,len,kol,sim : integer;
  b : string;
begin
  len := length(stroka);
  sim := length(simvol);
  if len >= n then begin
    kol :=  trunc(len/n);
    for i := 0 to kol-1 do insert(simvol,stroka,n*i+n+1+(i*(sim)));
  end;
  b := copy(stroka,length(stroka)-(sim-1),sim);
  if b = simvol then delete(stroka,length(stroka)-(sim-1),sim);
  result := stroka;
end;
disbnt вне форума Ответить с цитированием
Старый 05.07.2015, 16:04   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Предложил сыну написать и эту лабу.
В основе - моя функция без 100500 перераспределений памяти. будет сильно быстрее.
Код:
uses math;

function InsertSymbol(const src: string;
                      const symbol: char;
                      const interval: integer): string;
var
  idx, icnt, lgt, rdx: integer;
begin
  lgt:= Length(src);

  if (lgt <= interval) or (interval < 1)
    then begin
           result:= src;
           exit;
         end;

  icnt:= (lgt - 1) div interval;
  result:= StringOfChar(symbol, lgt + icnt);
  idx:= 1;
  rdx:= 1;

  repeat
    move(src[idx], result[rdx], min(lgt - idx + 1, interval) * sizeof(char));
    inc(idx, interval);
    inc(rdx, interval + 1);
  until idx > lgt;
end;
Код рабочий!

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 05.07.2015 в 16:11.
min@y™ вне форума Ответить с цитированием
Старый 05.07.2015, 20:14   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Заинтересовало количественное отношение.



Сынище допилил прогу. Тест честный, исходники вот.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 05.07.2015, 23:22   #9
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Предложил сыну написать и эту лабу.
В основе - моя функция без 100500 перераспределений памяти. будет сильно быстрее.
Код:
uses math;

function InsertSymbol(const src: string;
                      const symbol: char;
                      const interval: integer): string;
var
  idx, icnt, lgt, rdx: integer;
begin
  lgt:= Length(src);

  if (lgt <= interval) or (interval < 1)
    then begin
           result:= src;
           exit;
         end;

  icnt:= (lgt - 1) div interval;
  result:= StringOfChar(symbol, lgt + icnt);
  idx:= 1;
  rdx:= 1;

  repeat
    move(src[idx], result[rdx], min(lgt - idx + 1, interval) * sizeof(char));
    inc(idx, interval);
    inc(rdx, interval + 1);
  until idx > lgt;
end;
Код рабочий!

Спасибо !!!
nibufep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка символов Senjja Microsoft Office Word 14 19.12.2013 14:52
вставка ранее использовавшихся математических символов на листе roborrr Microsoft Office Excel 6 25.09.2013 11:24
Вставка символов Daelan C# (си шарп) 7 10.05.2013 14:30
Delphi2010 DBGrid win1251 вставка русских символов в базу (interbase) maLoy*508 Общие вопросы Delphi 5 02.12.2012 23:09
Вставка произвольных непечатных символов перед шифрованием Zibiv Общие вопросы Delphi 13 01.06.2011 22:57