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

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

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

 
 Ответить  Открыть новую тему 
> Ввести строку текста и, удалить последние N слов, содержащих заданную подстроку К раз.
сообщение
Сообщение #1


Новичок
*

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

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


Ввести строку текста. Может быть пустая строка или из одних пробелов.
Разделители: пробел ,/?.<;>:”!’*%. Слово- любая последовательность символов,
ограниченная с одной или двух сторон разделителями.
Удалить последние N слов, содержащих заданную подстроку К раз.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Что именно не получается ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Немного не понятно само задание.. тоесть удаление слов, и сама подстрока.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Немного не понятно само задание..
Пример:

abcabcabc,abcabb.bababc<privet>abcabcababc,abcabc,1abc
подстрока = 'abc', N = 2, K = 2

Что надо удалить? Сначала посмотрим, какие слова вообще содержат заданную подстроку K раз (рассматривается случай "как минимум K раз", можно больше):

abcabcabc,abcabb.bababc<privet>abcabcababc,abcabc,1abc

Итого, имеем 3 слова, удовлетворяющих критерию... 2 последних из них надо удалить...

Теперь более понятно, что именно требуется делать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


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

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

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


Цитата(volvo @ 20.11.2007 16:22) *

(рассматривается случай "как минимум K раз", можно больше): ...
Мне кажется, что нужно трактовать все же как точное равенство. В противном случае было бы сказано "как минимум". То есть в рассмотренном примере есть только одно слово, удовлетворяющее критерию (предпоследнее)

Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз.


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


Новичок
*

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

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


Цитата(Lapp @ 20.11.2007 16:37) *

Мне кажется, что нужно трактовать все же как точное равенство. В противном случае было бы сказано "как минимум". То есть в рассмотренном примере есть только одно слово, удовлетворяющее критерию (предпоследнее)

Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз.

Этот вопрос не уточнен... С ровным количеством становится посложнее.. dry.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
С ровным количеством становится посложнее
Ну, да... Если смена знака с ">=" на "=" - это усложнение, то... Нет слов.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Ну это зависит от структуры програмы.

А сама часть нахождения и удаления как выглядит? Может кто решал похожее?

Сообщение отредактировано: Fraddy -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


Ну продолжим...
Вот что накалякал:
uses crt;
const r:set of char=[' ',',','/','?','.','<','>',':',';','"','!',''','*','%'];
var s,c:string;
i,ns:byte;
F:boolean;
Begin
clrscr;
write('s=");
readln (s);
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;


.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Поскольку тебе надо удалять слова из строки, не трогая разделители, то лучше всего воспользоваться вот этим кодом: Разбиение на слова. Все способы. (но вносить начало и длину слова в массив не сразу, а только после того, как проверишь, действительно ли в найденном слове заданная подстрока встречается нужное число раз)...

Все, что останется после этого сделать - пройти с конца массива, и удалить из исходной строки нужное количество слов. Что вызывает затруднения?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


Опа.. спасибо, завтра после универа разберусь надеюсь.. =) решенную пришлю сюды, если будут проблемы обращусь..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата
в чем ошибка?
В синтаксисе... Сначала приведи программу к тому виду, в котором она компилируется. В частности, у тебя неправильно задается апостроф во множестве, ошибки в конструкции if/else, да и вообще end-ов больше чем begin-ов...

Да, кстати, что программа должна делать, по-твоему? Можешь объяснить просто алгоритм ее работы? Словами, не Паскалем?
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 29.03.2024 0:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name