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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2010, 00:26   #1
Saka
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 83
По умолчанию Удалить из строкового значения все вхождения заданного символа. Delphi

Задача такая:

Удалить из строкового значения все вхождения заданного
символа.

Нельзя: в задаче не использовать функции и процедуры для выполнения операций над строкой, а рассматривать строку как массив символов
Saka вне форума Ответить с цитированием
Старый 07.03.2010, 05:56   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Код:
m:=length(s);
  for i:=1 to Length(s) do
  if s[i]=c then begin
  for j:=i to m-1 do
       s[j]:=s[j+1];
       m:=m-1;
    end;//где s-строковое значение, а с-заданный символ 

for i:=1 to m do 
write(s[i]);
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.

Последний раз редактировалось ОДИНОЧЕСТВО В СЕТИ; 07.03.2010 в 11:48.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 07.03.2010, 08:29   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
s[i]:=''
нет.
Так нельзя.
Нельзя символу (а каждый элемент строки - это символ,
т.к. строка это по сути array[0..255] of char) присвоить пустую строчку!

p.s. я когда увидел такой код, я просто обалдел!
Если это сработало, это было просто гениально!


Saka,
если допускается, то самый простой способ решения данной задачи - использовать дополнительную (временную) строчку, куда и переносить все элементы исходной строки, кроме равных символу C
если же дополнительную строчку нельзя использовать,
тогда чуть сложнее:
надо в цикле идти по строке, а если текущий элемент строки совпал с символом C, то сдвигать все последущие (до конца строки) символы на его место.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.03.2010, 11:19   #4
shelest
Пользователь
 
Аватар для shelest
 
Регистрация: 01.11.2009
Сообщений: 99
По умолчанию

Код:
const n=255;
var
C: array [1..n] of char;
i,m:integer;
a:char;


begin
writeln ('vvedite kolichestvo elementov massiva ');
readln (m);
 for i:=1 to m do
begin
readln (C[i]);
end;
writeln ('vvedite element');// заданный элемент который будет удаляться из массива
readln (a);
for  i:=1 to m do
begin
if  c[i]=a then c[i]:=' ';
end;
for i:=1 to m do Write(c[i]:3);
writeln;
readln
end.
shelest вне форума Ответить с цитированием
Старый 07.03.2010, 12:01   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от shelest
Код:
if  c[i]=a then c[i]:=' ';
shelest, Вас не смущает, что это НЕ УДАЛЕНИЕ символа, а замена его на пробел?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.03.2010, 12:13   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
нет.
Так нельзя.
Нельзя символу (а каждый элемент строки - это символ,
т.к. строка это по сути array[0..255] of char) присвоить пустую строчку!
Строка в Дельфи это по сути указатель на строку, а не строка. И если явно не объявлено, то размер строки зависит от задачи - либо 255 символов, либо последовательность символов длиной до 4Гб. Поэтому если перед нами указатель на строку, то s[i]:='' использовать можно, поскольку в Дельфи строка это поток байтов, а не строка оканчивающаяся нулем, иными словами строка может содержать любые символы от 0 до 255 (в отличие от С).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 07.03.2010, 20:12   #7
Saka
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от shelest Посмотреть сообщение
Код:
const n=255;
var
C: array [1..n] of char;
i,m:integer;
a:char;


begin
writeln ('vvedite kolichestvo elementov massiva ');
readln (m);
 for i:=1 to m do
begin
readln (C[i]);
end;
writeln ('vvedite element');// заданный элемент который будет удаляться из массива
readln (a);
for  i:=1 to m do
begin
if  c[i]=a then c[i]:=' ';
end;
for i:=1 to m do Write(c[i]:3);
writeln;
readln
end.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
shelest, Вас не смущает, что это НЕ УДАЛЕНИЕ символа, а замена его на пробел?..
сделайте так чтобы удалялось, пожалуйста))
Saka вне форума Ответить с цитированием
Старый 07.03.2010, 23:14   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Utkin
s[i]:='' использовать можно
нет, нельзя. Неужели трудно запустить Delphi и проверить?!!
Это выражение выдаёт ошибку на этапе компиляции.


Цитата:
Сообщение от Saka
сделайте так чтобы удалялось, пожалуйста))
Saka, я предложил два варианта решения.
Первый (через дополнительную строчку) устраивает?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.03.2010, 23:40   #9
Saka
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
нет, нельзя. Неужели трудно запустить Delphi и проверить?!!
Это выражение выдаёт ошибку на этапе компиляции.



Saka, я предложил два варианта решения.
Первый (через дополнительную строчку) устраивает?
Абсолютно))
Saka вне форума Ответить с цитированием
Старый 07.03.2010, 23:52   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
var s, s2 : string;
  i : integer;
  c : char;
begin
  WriteLn('VVedite stroku: ');
  Readln(s);
  WriteLn('VVedite udalayemyj simvol: ');
  Readln(c);
  s2 := '';
  for i:=1 to length(s) do
    if s[i] <> c then s2 := s2 + s[i];

  WriteLn(' Resultat: ',s2);
  Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить первое слово, начинающееся с заданного символа. Нездешний Помощь студентам 11 18.10.2009 16:51
функция в delphi возвращающая код ascii заданного символа dollemika Помощь студентам 1 29.04.2009 20:03
преобразование строкового значения в числовое (assembler) MISHA13 Помощь студентам 2 27.01.2009 10:37
имя может встречаться несколько раз, как используя pos найти все вхождения имени в строку milton Паскаль, Turbo Pascal, PascalABC.NET 2 09.12.2008 22:34
Удалить из массива(одномерного) все повторяющиеся числа(Delphi) Махор Помощь студентам 4 29.11.2007 23:25