Изменение длины строки. Добавление строки - Turbo Pascal
Формулировка задачи:
Здравствуйте! В написании программы столкнулся с такой сложностью. Есть строка из 500 символов. Она задаётся как тип запись, состоящая из 2 полей: str500.sleft и str500.sright. Строка получается состоит из символов <500. Дано задание. Изменить размер строки, с этой сложностью я и столкнулся. Дана строка из 400 символов, пользователь вводит строку, например состоит из 10 символов, и выбирает позицию, например 245. Значит, необходимо, чтобы 5 символов записались после 245, а остальные 5, в правую строку, так же 5 символов, которые были до этого после 245 элемента так же переписались, и далее правая строка. Это первая ситуация, так же может быть, что строка, введённая для добавления влезала. Значит надо остаток от первой строк просто перенести в правую. Например, строка 400 символов, вводим 10 символов после 230, значит у нас получается так: (230 исходных+10 добавленных+10 исходных)=250 и от них сместить те 10, которые сместила добавленная строка, то есть правая строка должна быть такая (10 левой строки+150 правой строки) = 160. Извините за столько много букв, надеюсь кто - нибудь заинтересуется этим заданием. Необходимо в течение сегодняшнего дня (23.06.14). Если будет необходимо заплатить - могу не более 100р, но завтра, как буду в универе.
Фрагмент кода, сделанный мной, но имеет ошибки, не имею понятия какие. Я использовал дополнительную строку temp.sleft1 и temp.sright1 и почленно переписывал, но, так и не получилось. Кто посмотрит и хоть немного подскажет, заранее
большое спасибо)
Решение задачи: «Изменение длины строки. Добавление строки»
textual
Листинг программы
Type Str500 = Record sleft, sright : String[250]; end; Var St : Str500; { требуется доделать проверку при строке < 250 символов общей длины } Procedure Insert500(InsSt : String; Var S : Str500; n : Word); Begin If n>250 then Insert(InsSt,S.sright,n-250) else If n+Length(InsSt)<=250 then Begin Insert(Copy(S.sleft,250-Length(InsSt),Length(S.sleft)),S.sright,1); Delete(S.sleft,250-Length(InsSt),Length(InsSt)); Insert(InsSt,S.sleft,n); end else Begin { 252-n -номер символа InsSt с которого она (часть строки) заносится в rigth} Insert(Copy(S.sleft,n,251-n),S.sright,1); Delete(S.sleft,n,251-n); Insert(Copy(InsSt,1,251-n),S.sleft,n); Insert(Copy(InsSt,252-n,Length(InsSt)+n-251),S.sright,1); end; { If Length(S.sright)>250 then Delete(S.sright,251,5); } end; Begin {250 символов} St.sleft:='1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890'; {150 символов} St.sright:='1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890'; Writeln(Length(St.sleft)); Writeln(Length(St.sright)); Writeln; Insert500('ABCDEFGHIJ',St,245); Writeln(Length(St.sleft)); Writeln(Length(St.sright)); Writeln; Writeln(St.sleft); Writeln(St.sright); Writeln; end.
Объяснение кода листинга программы
- В данном коде используется структура данных Str500, которая представляет собой запись с двумя полями: sleft и sright, оба из которых являются строками длиной до 250 символов.
- Переменная St инициализируется двумя строками, длина каждой из которых составляет 250 символов.
- В процедуре Insert500 принимается строка InsSt, длина которой не превышает 250 символов, и переменная n, которая указывает на количество символов, которые нужно добавить к строке InsSt.
- Если n больше 250, то выполняется операция вставки строки InsSt в поле sright записи Str500.
- Если n меньше или равно 250, то выполняется ряд проверок для определения того, как следует изменить строку InsSt и поле sleft записи Str500.
- Если длина строки InsSt меньше или равна 250 символам, то выполняется операция вставки строки InsSt в поле sleft записи Str500.
- Если длина строки InsSt больше 250 символов, то выполняется операция удаления символов из поля sleft записи Str500.
- После выполнения всех проверок и операций изменения строки InsSt и записи Str500, результат выводится на экран.
- Затем в цикле выводятся длина строк sleft и sright записи Str500.
- В конце выполняется вызов процедуры Insert500, в которую передается строка 'ABCDEFGHIJ', переменная St и значение 245 для переменной n.
- Результаты выполнения этой процедуры также выводятся на экран.
- Завершается выполнение программы.