![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Fraddy |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ввести строку текста. Может быть пустая строка или из одних пробелов.
Разделители: пробел ,/?.<;>:”!’*%. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями. Удалить последние N слов, содержащих заданную подстроку К раз. |
klem4 |
![]()
Сообщение
#2
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Что именно не получается ?
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Fraddy |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
Немного не понятно само задание.. тоесть удаление слов, и сама подстрока.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Немного не понятно само задание.. Пример:abcabcabc,abcabb.bababc<privet>abcabcababc,abcabc,1abc подстрока = 'abc', N = 2, K = 2 Что надо удалить? Сначала посмотрим, какие слова вообще содержат заданную подстроку K раз (рассматривается случай "как минимум K раз", можно больше): abcabcabc,abcabb.bababc<privet>abcabcababc,abcabc,1abc Итого, имеем 3 слова, удовлетворяющих критерию... 2 последних из них надо удалить... Теперь более понятно, что именно требуется делать? |
Lapp |
![]()
Сообщение
#5
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
(рассматривается случай "как минимум K раз", можно больше): ... Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Fraddy |
![]() ![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
Мне кажется, что нужно трактовать все же как точное равенство. В противном случае было бы сказано "как минимум". То есть в рассмотренном примере есть только одно слово, удовлетворяющее критерию (предпоследнее) Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз. Этот вопрос не уточнен... С ровным количеством становится посложнее.. ![]() |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата С ровным количеством становится посложнее Ну, да... Если смена знака с ">=" на "=" - это усложнение, то... Нет слов. |
Fraddy |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну это зависит от структуры програмы.
А сама часть нахождения и удаления как выглядит? Может кто решал похожее? Сообщение отредактировано: Fraddy - 20.11.2007 21:11 |
Fraddy |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну продолжим...
Вот что накалякал: uses crt;. |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Поскольку тебе надо удалять слова из строки, не трогая разделители, то лучше всего воспользоваться вот этим кодом: Разбиение на слова. Все способы. (но вносить начало и длину слова в массив не сразу, а только после того, как проверишь, действительно ли в найденном слове заданная подстрока встречается нужное число раз)...
Все, что останется после этого сделать - пройти с конца массива, и удалить из исходной строки нужное количество слов. Что вызывает затруднения? |
Fraddy |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
Опа.. спасибо, завтра после универа разберусь надеюсь.. =) решенную пришлю сюды, если будут проблемы обращусь..
|
Fraddy |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
в чем ошибка?
Код uses crt; const r:set of char=[' ',',','/','?','.','<','>',':',';','"','!',''','*','%']; var g,s,c:string; i,ns:byte; F:boolean; Begin clrscr; write('s="); readln (s); writeln('g='); readln(g); i:=1; F:=true; while i<=length(s) then {i - начало слова} Begin ns:=i; C:=''; while (i<=length(s)) and NOT (s[i] in R) do {Проход по слову} Begin if pos(s[i],c)=0 then c:- c+s; inc (i); end; if pos(g,c)>=1 then begin delete(s,ns,i-ns); f:=false; i:=ns-1 end; end; i:=i+1 end; is f then writeln ('no'); else writeln(s); readkey end. end. Сообщение отредактировано: Fraddy - 27.12.2007 18:50 |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата в чем ошибка? В синтаксисе... Сначала приведи программу к тому виду, в котором она компилируется. В частности, у тебя неправильно задается апостроф во множестве, ошибки в конструкции if/else, да и вообще end-ов больше чем begin-ов...Да, кстати, что программа должна делать, по-твоему? Можешь объяснить просто алгоритм ее работы? Словами, не Паскалем? |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:44 |