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

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

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

 
 Ответить  Открыть новую тему 
> Разбиение на слова., Не получается переделать прогу.
сообщение
Сообщение #1





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

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


Я взял прогу с топика в шапке
Разбиение на слова. Все способы.

Сделал её такой:
program m1;
const
delimiter = ['@', '#', '$', '%','&'];
type
wrd_info = record
start, len: byte;
end;

function get_words(s: string;
var words: array of wrd_info): integer;
var
count: integer;

i, curr_len: byte;

begin
count := -1; i := 1;
while i <= length(s) do begin

while (s[i] in delimiter) and (i <= length(s)) do inc(i);

curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;

if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len
end;
end;

end;
get_words := count + 1;
end;


const
max_word = 255;
var
words: array[1 .. max_word] of wrd_info;
i, n,bn :integer;
s,ss:string;
begin
readln (s);
n := get_words(s, words);
writeln('words:');
bn:=n;
while i<bn do begin
ss:=ss+ copy(s, words[i].start, words[i].len);
inc(i); inc(i);
writeln(ss);
end;
writeln(ss);
end.


Условие моей задачи: дана строка. Слова разделяются спец символами задаными во множесте ['@', '#', '$', '%','&']. Надо удалить из строки чётные слова.

Проблемы:
В переделаной проге удаляются нечётные слова. И почему то правильно работает если разделитель '#' при других разделителях уже сбивается.

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


Гость






Пример ввода, на котором сбой происходит, приведи...

Во вторых, если хочешь НОРМАЛЬНУЮ работу - проходи по словам от N к 1, и УДАЛЯЙ из исходной строки все, что тебе не нужно, а не конструируй новую строку...

Вот так:
begin
// readln (s);
s := 'this$is$just$a$test$of$string$';
n := get_words(s, words);
writeln('result = ');

i := n;
if odd(i) then dec(i);
while i > 1 do begin
delete(s, words[i].start, words[i].len);
dec(i, 2);
end;
writeln(s);
end.
Все нормально работает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


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


Гость






Ты хочешь ВСЕ разделители удалить вообще? Или какие-то конкретно? В приведенной мной строке какой должен быть результат?

P.S. Я, между прочим, просил привести вводимые данные! Сколько раз повторять? ТЕЛЕПАТЫ на другом форуме !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Разобрался, переделал, сдал.
Спасибо за хелп.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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