Ввести строку текста и, удалить последние N слов, содержащих заданную подстроку К раз. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Ввести строку текста и, удалить последние N слов, содержащих заданную подстроку К раз. |
Fraddy |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Ввести строку текста. Может быть пустая строка или из одних пробелов.
Разделители: пробел ,/?.<;>:”!’*%. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями. Удалить последние N слов, содержащих заданную подстроку К раз. |
klem4 |
Сообщение
#2
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Что именно не получается ?
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Fraddy |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Немного не понятно само задание.. тоесть удаление слов, и сама подстрока.
|
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 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
(рассматривается случай "как минимум K раз", можно больше): ... Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Fraddy |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Мне кажется, что нужно трактовать все же как точное равенство. В противном случае было бы сказано "как минимум". То есть в рассмотренном примере есть только одно слово, удовлетворяющее критерию (предпоследнее) Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз. Этот вопрос не уточнен... С ровным количеством становится посложнее.. |
volvo |
Сообщение
#7
|
Гость |
Цитата С ровным количеством становится посложнее Ну, да... Если смена знака с ">=" на "=" - это усложнение, то... Нет слов. |
Fraddy |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Ну это зависит от структуры програмы.
А сама часть нахождения и удаления как выглядит? Может кто решал похожее? Сообщение отредактировано: Fraddy - |
Fraddy |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Ну продолжим...
Вот что накалякал: uses crt;. |
volvo |
Сообщение
#10
|
Гость |
Поскольку тебе надо удалять слова из строки, не трогая разделители, то лучше всего воспользоваться вот этим кодом: Разбиение на слова. Все способы. (но вносить начало и длину слова в массив не сразу, а только после того, как проверишь, действительно ли в найденном слове заданная подстрока встречается нужное число раз)...
Все, что останется после этого сделать - пройти с конца массива, и удалить из исходной строки нужное количество слов. Что вызывает затруднения? |
Fraddy |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Опа.. спасибо, завтра после универа разберусь надеюсь.. =) решенную пришлю сюды, если будут проблемы обращусь..
|
Fraddy |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
в чем ошибка?
Код 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 - |
volvo |
Сообщение
#13
|
Гость |
Цитата в чем ошибка? В синтаксисе... Сначала приведи программу к тому виду, в котором она компилируется. В частности, у тебя неправильно задается апостроф во множестве, ошибки в конструкции if/else, да и вообще end-ов больше чем begin-ов...Да, кстати, что программа должна делать, по-твоему? Можешь объяснить просто алгоритм ее работы? Словами, не Паскалем? |
Текстовая версия | 11.01.2025 9:29 |