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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2011, 13:42   #1
Avatonk
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 21
По умолчанию Turbo pascal.Строки.

Сделал программу по задаче,она должна удалять из введенной строки символы *
Код:
program zadacha2;
var
w:string;
n,i:integer;
begin
writeln('Введите тест');
readln(w);
n:=Length(w);
for i:=1 to n do begin if w[i]='*' then delete(w,i,n);
end;
writeln('итог-',w);
readln;
end.
Но,если я напишу что-то типа dateret***** то мне программа выдаёт верный ответ: dateret а если ввожу date*****ret то выдаёт date хотя должна выдавать date ret.

Последний раз редактировалось Stilet; 23.10.2011 в 16:07.
Avatonk вне форума Ответить с цитированием
Старый 23.10.2011, 15:44   #2
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Я не знаю паскаль, но:

1)Неужели индексация строки начинается с 1, а не с 0?

2)В функции delete 3 параметр указывает кол-во удаляемых символов. Так нафига ты удаляешь всю оставшуюся строку, если тебе нужно удалить этот конкретный символ? То есть 3 параметр не n, а 1.
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.

Последний раз редактировалось Lasur; 23.10.2011 в 15:59.
Lasur вне форума Ответить с цитированием
Старый 23.10.2011, 16:01   #3
Avatonk
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 21
По умолчанию

если ставлю 1 то удаляет 3 звёздочки а не все которые напечатаны
Avatonk вне форума Ответить с цитированием
Старый 23.10.2011, 16:08   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
repeat  i:=pos(w,'*'); delete(w,i,1);until i=0;
Сойдет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2011, 16:10   #5
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Цитата:
Сообщение от Avatonk Посмотреть сообщение
если ставлю 1 то удаляет 3 звёздочки а не все которые напечатаны
Строка ведь сокращается при удалении, соответственно, указатель перескакивает 1 символ. Попробуй после if добавить еще i--

Опоздал, у Stilet код проще)
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.

Последний раз редактировалось Lasur; 23.10.2011 в 16:12.
Lasur вне форума Ответить с цитированием
Старый 23.10.2011, 16:21   #6
Avatonk
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 21
По умолчанию

ок,спасибо!
Avatonk вне форума Ответить с цитированием
Старый 24.10.2011, 00:16   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а ещё можно использовать "классический" приём - в случае, когда удаляются элементы структуры, по которым и идёт цикл (количество элементов при этом уменьшается) то удалять нужно в цикле ОТ конца структуры (от последнего элемента) к началу (к первому элементу).
примерно так:
Код:
for i:=n downto 1 do 
  if w[i]='*' then delete(w,i,1);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Turbo Pascal и Free Pascal , в чем разница? antoxann Паскаль, Turbo Pascal, PascalABC.NET 31 09.11.2011 07:52
Turbo Pascal or Pascal ABC Ikram Паскаль, Turbo Pascal, PascalABC.NET 0 27.04.2010 13:44
Turbo Pascal glavad Помощь студентам 4 16.12.2009 12:36
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28
Turbo Pascal 7.0 Строки (String) Lerank Помощь студентам 11 16.12.2008 20:27