IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Заменить первые 3 символа слов, имеющих выбранную длину, на символ *
Grief
сообщение 11.03.2010 17:14
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


Заменить первые 3 символа слов, имеющих выбранную длину, на символ * .
Длинна слов 6-8
Количество слов 10

По найденным урокам не особо смог ориентироваться, нужен наглядный пример sad.gif
Буду признателен за помощь... Спасибо заранее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 14.03.2010 20:34
Сообщение #2


Гость






Ну, твой код должен вылетать с ошибкой, если я не ошибаюсь. По крайней мере на компиляторе, который проверяет вылет за конец строки. Смотри (сразу говорю, набираю прямо здесь, так что тестируй и еще раз тестируй, но основная идея вот такая):

const razd: set of char=[' ','.',',',':',';','!'];
var
st, buf:string;
L: integer;
begin
write('длина -> '); readln(L);
write('строка -> '); readln(st);

repeat
{ для начала проверяем, первый символ - разделитель или нет? }
if (length(st)=0) or (st[1] in razd) then { СНАЧАЛА проверяем длину, только потом - st[1] !!! }
while (length(st) > 0) and (st[1] in razd) do
begin
write(st[1]); delete(st,1,1); { не теряем символы - разделители, выводим из перед удалением }
end
else begin
{ нет, не разделитель, составляем слово: }
while (length(st)>0) and (not (st[1] in razd)) do { Еще раз - СНАЧАЛА длина, потом первый символ }
begin
buf:=buf+st[1]; delete(st,1,1);
end;

if length(buf) = L then
begin
delete(buf, 1, 3); insert('*', buf, 1); { <--- Удалили три символа, вставили один }
end;
write(buf); { слово печатается в любом случае, не только при каком-то условии }
buf:='';
end; { else закончился }
until (length(st)=0) and (length(buf)=0);
readln;
end.
Теперь - зачем все это делается: а затем, что если ты ввел строку, и тебя попросили заменить в ней первые символы четырех(например)-буквенных слов на звездочку, это не значит, что тебе надо вывести измененные огрызки этих самых четырехбуквенных слов. Тебе надо получить строку, полную, в которой части слов нужной длины заменены звездочками, а все остальное - сохранено (другие слова, разделители, это не должно пострадать).

Кстати, я бы еще добавил условие, проверяющее, а больше ли введенная пользователем "длина", чем 3. Потому что удалять из двухбуквенного слова три первых символа - это по меньшей мере странно. Какая-то защита от дурака должна быть...

Основа у тебя есть. Дорабатывай...

P.S. Объяснение, почему я поменял порядок следования условий, и какое вообще это имеет значение - будет, если тебе это интересно. Будут еще какие вопросы по коду - задавай.
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.03.2010 4:48
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 14.03.2010 20:34) *
Будут еще какие вопросы по коду - задавай.
Мало надежды, что автор темы будет задавать вопросы. Скорее всего, он проигнорирует твой мессадж, volvo, как он проигнорировал мой.

Терпеть не могу спрашивающих, не обращающих внимания на ответы. Ничего не может быть хуже norespect.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 0:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"