Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 181
1

Удаление символов из строки без использования стандартной функции delete

03.12.2017, 22:24. Просмотров 3382. Ответов 16
Метки нет (Все метки)


Как удалить символы из строки без использования стандартной функции delete?
конкретно моя задача: Дана строка. Удалить из неё все удвоенные символы (kk jj oo и т.д). БЕЗ DELETE!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2017, 22:24
Ответы с готовыми решениями:

Текст стандартной функции delete для строки
здравсвуйте .подскажите как написать стандартную функцию delete для строки . С такими условиями ...

Сравнение строк без использования стандартной функции strncmp
Написать программу, которая сравнивает строки не использую стандартную функцию strncmp. При чем...

Генератор случайных чисел без использования стандартной функции
Нужен код генератора случайных чисел на c++ без использования функции rand(). Помогите пожалуйста ,...

Написать аналог шаблонной функции без использования стандартной (и других библиотек)
Здравствуйте! Набрел на вот такой вопрос по C++. Вот мой вариант ответа: template<class...

16
4266 / 2047 / 2098
Регистрация: 10.12.2014
Сообщений: 7,902
04.12.2017, 08:09 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function mydel(s : string; n : Byte) : string;
var i : Byte;
begin
  if n > Length(s) then Exit;
  for i := n to Length(s)-1 do
    s[i] := s[i+1];
  s[0] := chr(Length(s)-1);
end;
 
var s : String; i : byte;
begin
  ReadLn(s);
  for i := Length(s) downto 2 do
    if s[i] = s[i-1] then s := mydel(s, i);
  WriteLn(s);
end.
0
Модератор
62953 / 46963 / 32364
Регистрация: 18.05.2008
Сообщений: 113,789
04.12.2017, 08:34 3
В конец функции добавить
Pascal
1
 mydel:=s
0
4266 / 2047 / 2098
Регистрация: 10.12.2014
Сообщений: 7,902
04.12.2017, 08:39 4
Да. Точно!
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 181
04.12.2017, 19:48  [ТС] 5
Во первых не работает. Ошибка в этой строке, ругается на выход за границы массива в этой строке s[0] := chr(Length(s)-1);
Во вторых что это за chr? Это же тоже вроде как стандартная функция. Мне надо без них совсем!
0
Модератор
8403 / 4155 / 2873
Регистрация: 17.08.2012
Сообщений: 13,249
04.12.2017, 20:22 6
Цитата Сообщение от Kesha777 Посмотреть сообщение
выход за границы массива в этой строке s[0]
Во-первых - это Ваша вина. Пишете в ветку Turbo Pascal, а компилируете программу в каком-то другом диалекте паскаля.

Во-вторых, chr НЕ относится к стандартным процедурам и функциям работы со строками. По какой причине его нельзя применять?

И огласите весь список процедур и функций, пожалуйста, с чем именно Вам нельзя, чтобы по 10 раз для Вас программы не писать напрасно.

Цитата Сообщение от Kesha777 Посмотреть сообщение
Мне надо без них совсем!
Вам на чистом паскале нужно? Почему не указали это в своём вопросе?
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 181
04.12.2017, 20:53  [ТС] 7
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Во-первых - это Ваша вина. Пишете в ветку Turbo Pascal, а компилируете программу в каком-то другом диалекте паскаля.
я пробовал в трех разных программах и нигде не работает.

Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Во-вторых, chr НЕ относится к стандартным процедурам и функциям работы со строками. По какой причине его нельзя применять?
Об этом я не знал поэтому и задал вопрос.

Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Вам на чистом паскале нужно? Почему не указали это в своём вопросе?
Я указал как приказали мне - не использовать стандартные функции. К сожалению я не знаю и большинства из них, ведь только учусь
0
Эксперт Pascal/Delphi
6567 / 4421 / 4717
Регистрация: 05.06.2014
Сообщений: 21,711
04.12.2017, 20:59 8
Цитата Сообщение от Kesha777 Посмотреть сообщение
я пробовал в трех разных программах и нигде не работает.
Проверено в fpc в режиме совместимости с Турбо Паскаль. Работает.
0
Модератор
62953 / 46963 / 32364
Регистрация: 18.05.2008
Сообщений: 113,789
04.12.2017, 21:01 9
А я проверял вчера в постом АВС, тоже работает после добавления в код JuriiMW
Pascal
1
mydel:=s
0
Модератор
8403 / 4155 / 2873
Регистрация: 17.08.2012
Сообщений: 13,249
04.12.2017, 21:06 10
Цитата Сообщение от Kesha777 Посмотреть сообщение
в трех разных программах
Да хоть в 10. В Turbo Pascal не запускали, ведь так? А программу для Вас написали именно для Turbo Pascal.

На котором диалекте паскаля Вам требуется программа?
Цитата Сообщение от Kesha777 Посмотреть сообщение
не использовать стандартные функции
Функции нельзя, а процедуры, значит, можно? Тогда почему нельзя использовать процедуру delete? Уточните. Скорее всего, запрещено использовать стандартные процедуры и функции для работы со строками, за исключением функции length. Я прав?
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 181
04.12.2017, 21:09  [ТС] 11
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Функции нельзя, а процедуры, значит, можно? Тогда почему нельзя использовать процедуру delete? Уточните. Скорее всего, запрещено использовать стандартные процедуры и функции для работы со строками, за исключением функции length. Я прав?
именно

Цитата Сообщение от Puporev Посмотреть сообщение
тоже работает после добавления в код JuriiMW
а куда именно это добавлять? может не туда пихнул

Цитата Сообщение от Cyborg Drone Посмотреть сообщение
На котором диалекте паскаля Вам требуется программа?
для компилятора freepascal 2.6.0 Как бы. Но у нас диалект турбо паскаль.

Компилируется в fpc, но не выводит строку с удаленными повторками.
0
Эксперт Pascal/Delphi
6567 / 4421 / 4717
Регистрация: 05.06.2014
Сообщений: 21,711
04.12.2017, 21:21 12
Pascal
1
2
3
4
5
6
7
8
9
function mydel(s : string; n : Byte) : string;
var i : Byte;
begin
  if n > Length(s) then Exit;
  for i := n to Length(s)-1 do
    s[i] := s[i+1];
  s[0] := chr(Length(s)-1);
  mydel:=s;
end;
0
Модератор
8403 / 4155 / 2873
Регистрация: 17.08.2012
Сообщений: 13,249
04.12.2017, 21:26 13
Цитата Сообщение от Kesha777 Посмотреть сообщение
куда именно это добавлять
После строки 7.

Можно проще. Мой вариант программы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
var s, t: string;
    i: integer;
begin
  readln(s);
  t := '';
  if length(s) > 0 then t := s[1];
  for i := 2 to length(s) do if s[i] <> t[length(t)] then t := t + s[i];
  s := t;
  writeln(s);
  readln
end.
Подойдёт?
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 181
04.12.2017, 21:31  [ТС] 14
ZX Spectrum-128, Ошибка времени выполнения: Индекс находился вне границ массива.

fpc не выводит правильную строку

Добавлено через 2 минуты
Cyborg Drone, в принципе неплохо, но он из удвоенных букв одну оставляет. А если чтоб не оставлял сделать можно? но программу в таком ключе, мне нравится
0
Эксперт Pascal/Delphi
6567 / 4421 / 4717
Регистрация: 05.06.2014
Сообщений: 21,711
04.12.2017, 21:32 15
Цитата Сообщение от Kesha777 Посмотреть сообщение
fpc не выводит правильную строку
Не знаю, никаких ошибок нет, все компилируется.
0
Миниатюры
Удаление символов из строки без использования стандартной функции delete  
Модератор
8403 / 4155 / 2873
Регистрация: 17.08.2012
Сообщений: 13,249
04.12.2017, 21:52 16
Лучший ответ Сообщение было отмечено Kesha777 как решение

Решение

Для того, чтобы программа для TP правильно работала в FPC, добавьте перед первой строкой программы строку
Pascal
{$mode tp}
Добавлено через 19 минут
Цитата Сообщение от Kesha777 Посмотреть сообщение
из удвоенных букв одну оставляет. А если чтоб не оставлял сделать можно?
Вот ведь... Неверно понял задание. Можно, конечно. Вот так, например:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var s, t: string;
    i: integer;
begin
  readln(s);
  t := '';
  i := 1;
  while i <= length(s) do
    begin
      if (i = length(s)) or (s[i] <> s[i + 1])
        then t := t + s[i]
        else inc(i);
      inc(i)
    end;
  s := t;
  writeln(s);
  readln
end.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5698 / 3413 / 2430
Регистрация: 22.11.2013
Сообщений: 9,578
Записей в блоге: 1
04.12.2017, 22:23 17
Лучший ответ Сообщение было отмечено Cyborg Drone как решение

Решение

Вообще говоря, вместо задачи "удалить отдельные символы" куда перспективнее решать задачу "оставить символы, кроме удаляемых":
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  s: String;
  j, k, l: Byte;
begin
  ReadLn(s);
  j:=1; l:=Length(s); {k:=0;}
  while j<l do begin
    if s[j]<>s[j+1] then begin
      Inc(k); s[k]:=s[j];
    end else Inc(j);
    Inc(j);
  end;
  if j=l then begin
    Inc(k); s[k]:=s[j];
  end;
  s[0]:=Char(k);
end;
Если и Length нельзя использовать, заменить на Byte(s[0]).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2017, 22:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Извлечение подстроки из строки (без использования библиотек функции)
Извлечение подстроки из строки (без использования библиотек функций). Помогите чем кто может,...

Копирование файла с заменой без использования File.Delete()
как сделать копирование файла с заменой без использования file.delete() в С#,файл в .zip формате?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.