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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2010, 02:37   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание Работа со String

Здравствуйте!


Люди помогите пожалуйста мне нужно реализовать вот такие методы.

1 - Копирование - копирование части строки заданной длины с заданной позиции.
2 - Удаление - удаление части строки заданной длины с заданной позиции.
3 - Поиск - поиск подстроки в строке.

Все это нужно реализовать не стандартным методом, использовать "Copy, Pos" - нельзя.


Заранее очень благодарен.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 10.12.2010, 02:47   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Решения в лоб

Передаем позицию, с какой начинать и кол-во символов для копирования или удаления
1. В цикле переписывать с заданной позиции символы
Код:
 for i:=a to a+len do
  output:=output+input[i];
2. Также в цикле перебрать строку в цикле
Код:
 for i:=1 to length(input) do
 if (i<a)or(i>(a+len)) then output:=output+input[i];
3.
Код:
  flag:=false;//признак того что начали проверять совпадения
  n:=0;// количество совпдаений
  pos:=0;
for i:=1 to length(input) do
     begin
      if n=length(ouput) then pos:=i-n+1;
      if flag then
              begin
               if output[n]<>input[i] then 
                                                    begin
                                                     flag:=false;
                                                     n:=0;
                                                    end
                 else inc(n);
              end;
       if output[1]=input[i] then begin
                                           flag:=true;
                                           n:=2;
                                          end;
     end;
Не проверял, попробуйте доделать если понравилась идея
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 10.12.2010 в 02:58.
alex_fcsm вне форума Ответить с цитированием
Старый 10.12.2010, 02:57   #3
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Хороший метод, может кто-то еще что-то предложит.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 10.12.2010, 03:01   #4
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Проверил - вроде работает


Код:
  function pos(inp,ou:string):integer;
  var  n,i:integer;
       flag:boolean;

  begin

  flag:=false;//признак того что начали проверять совпадения
  n:=0;// количество совпдаений
  pos:=0;
for i:=1 to length(inp) do
     begin
      if n=length(ou) then pos:=i-n+1;
      if flag then
              begin
               if ou[n]<>inp[i] then
                                                    begin
                                                     flag:=false;
                                                     n:=0;
                                                    end
                 else inc(n);
              end;
       if ou[1]=inp[i] then begin
                                           flag:=true;
                                           n:=2;
                                          end;
     end;
end;

function del(a,len:integer;inp:string):string;
var i:integer;
    st:string;
begin
 st:='';
 for i:=1 to length(inp) do
 if (i<a)or(i>(a+len-1)) then st:=st+inp[i];
 del:=st;
end;

function cop(a,len:integer;inp:string):string;
var i:integer;
    st:string;
begin
 st:='';
  for i:=a to a+len-1 do
  st:=st+inp[i];
 cop:=st;
end;


begin
writeln(cop(1,3,'123456'));
writeln(del(1,3,'123456'));
writeln(pos('321234','123'));
end.
Входные параметры можно поменять местами при желании и наличии религиозных предубеждений))
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 10.12.2010 в 03:07.
alex_fcsm вне форума Ответить с цитированием
Старый 10.12.2010, 07:08   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от SoftKoc Посмотреть сообщение
Хороший метод, может кто-то еще что-то предложит.
А что Вас в предложенных не устраивает? Просто запросы какие-то у Вас странные - сначала помогите, потому давайте еще. Сказку о золотой рыбке не напоминает? Если Вам нужно другое решение аргуметируйте почему.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 10.12.2010, 07:59   #6
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Радость

Цитата:
Сообщение от Utkin Посмотреть сообщение
А что Вас в предложенных не устраивает? Просто запросы какие-то у Вас странные - сначала помогите, потому давайте еще. Сказку о золотой рыбке не напоминает? Если Вам нужно другое решение аргуметируйте почему.
#4 - пост меня полностью устраивает.
Спасибо большое.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 12.12.2010, 22:46   #7
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание

Люди помогите кто-то. Вот есть функция, вроде по ней все понятно. Но не до конца, Опишите пожалуйста ее принцип на русском для полного понимания.
Код:
function pos(inp,ou:string):integer;
  var  n,i:integer;
       flag:boolean;

  begin

  flag:=false;//признак того что начали проверять совпадения
  n:=0;// количество совпдаений
  pos:=0;
for i:=1 to length(inp) do
     begin
      if n=length(ou) then pos:=i-n+1;
      if flag then
              begin
               if ou[n]<>inp[i] then
                                                    begin
                                                     flag:=false;
                                                     n:=0;
                                                    end
                 else inc(n);
              end;
       if ou[1]=inp[i] then begin
                                           flag:=true;
                                           n:=2;
                                          end;
     end;
end;
Заранее очень благодарен.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с типом днных STRING Nika2010 Помощь студентам 10 16.02.2010 07:18
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57
Работа со string (C++) Tiga Общие вопросы C/C++ 5 16.12.2009 02:12
работа с текстом string LeoN Общие вопросы Delphi 13 24.09.2008 10:54
Работа с String Grid - помогите написать "Табель рабочего времени" Deicider Помощь студентам 3 29.11.2006 20:59