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

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

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

 
 Ответить  Открыть новую тему 
> Задача на String!, помогите! срочно!
сообщение
Сообщение #1


Гость






Нужно удалить из предложения слова, которые встречаются в нем заданное количество раз.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

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

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


Разбей для начала строку на слова.
разбиение на слова.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






klem4, не пойдет... Проверяй строку: 'da da net yes yes yes no net' при count = 2...
Должно остаться 'yes yes yes no', а что остается? ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


ага, лажа полная smile.gif))))))))
буду чинить)))


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


Гость






А вот так вроде работает...

uses crt;
const
limits=[#0..#32,'.',',','!','?',';'];
max_str = 30;

var
x: array[1 .. max_str] of record
s: string;
cnt: integer;
end;

len, p, ii, x_count: integer;
b: boolean;

s: string;
i, j, count, bword: integer;

Begin
clrscr;
write('s='); readln(s);
write('count='); readln(count);

i:=1; j:=0;

x_count := 0;
while i <= length(s) do begin
while (i<=length(s)) and (s[i] in limits) do inc(i);
if i <= length(s) then begin
bword := i;
inc(j);
while (i<=length(s)) and (not(s[i] in limits)) do inc(i);

b := false;
p := 1;
while (p <= x_count) and (not B) do begin
if x[p].s = copy(s,bword,i-bword) then begin
inc(x[p].cnt); b := true;
end;
inc(p)
end;

if not b then begin
inc(x_count);
x[x_count].s:=copy(s,bword,i-bword);
x[x_count].cnt := 1;
end;
end;
end;

for i := 1 to x_count do
if x[i].cnt = count then begin
len := length(x[i].s);
ii := 1;
repeat
p := pos(x[i].s, copy(s, ii, 255)) + pred(ii);
if (p <> pred(ii)) then begin
b := true;
if p > 1 then b := b and (s[p-1] in limits);
if pred(p)+len < length(s) then
b := b and (s[p+len] in limits);

if b then delete(s, p, len)
else ii := p + len;
end
until p = pred(ii);
end;

writeln('s=',s);
readln;
end.

Тестировалось на:
s := 'dat da da net yes yes yes no net neta';
count := 2;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


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

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

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


таак опоздал, но вроде исправился :DDDD
уже из принципа решил, надеюсь этоправильно ))) вроде тестил прилично)))
uses crt;
const
limits=[#0..#32,'.',',','!','?',';'];
var
x,yes,no:array[1..30] of string;
s:string;
i,j,k,l,yy,nn,ycount,ncount,count,count1,bword:integer;
flag:boolean;

Begin

clrscr;

write('s='); readln(s);

write('count='); readln(count);

i:=1; j:=0;

while(i<=length(s)) do
begin
while(i<=length(s))and(s[i] in limits) do
inc(i);
if i<=length(s) then
begin
bword:=i;
inc(j);
while(i<=length(s))and(not(s[i] in limits)) do
inc(i);
x[j]:=copy(s,bword,i-bword);
end;
end;

ycount:=0; ncount:=0;

for i:=1 to j do
begin
count1:=0;
for k:=i to j do
if x[i]=x[k] then
inc(count1);
if count1=count then
begin
if ycount>0 then
begin
flag:=false;
l:=1;
while(l<=ycount)and(not(flag)) do
if x[i]=yes[l] then
flag:=true
else inc(l);
if flag then
begin
inc(ycount);
yes[ycount]:=x[i];
end
else
begin
inc(ncount);
no[ncount]:=x[i];
end
end
else
begin
inc(ncount);
no[ncount]:=x[i];
end;

end{c=c}
else
begin
if ncount>0 then
begin
flag:=false;
l:=1;
while(l<=ncount)and(not(flag)) do
if x[i]=no[l] then
flag:=true
else inc(l);
if not(flag) then
begin
inc(ycount);
yes[ycount]:=x[i];
end
end
else
begin
inc(ycount);
yes[ycount]:=x[i];
end;
end;
end;

for i:=1 to ycount do
write(yes[i],' ');
readln;
end.



злая задача :fire:

Сообщение отредактировано: klem4 -


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


Гость






:D Опять не пойдет... Ты же все разделители потеряешь !!!
Попробуй:
s := 'dat da da ; net yes ;; yes yes ... no net neta';
count := 2;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






спасибо!
а нет ли более простого решения? не учитывая знаки препинания, а только пробелы.
вроде бы, решение должно включать в себя: выделение каждого слова, подсчет количества каждого слова в предложении, и, если это количество равно заданному числу, удаление этих слов из строки.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


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

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

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


уж куда проще smile.gif))
я сейчас делаю еще одну версию, мне кажется она буде проще двух предыдущих, сегодня уже надоело, завтра отлаживать буду и выложу, как доделаю...если доделаю конечно smile.gif))


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


Гость






тогда ладно...мне завтра уже поздно sad.gif
спасибо огроомное!
 К началу страницы 
+ Ответить 

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

 





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