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

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

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

> Наименьшая длина слова
18192123
сообщение 7.01.2007 12:59
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

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


Преобразовать данную строку, удалив из неё три слова наименьшей длины.

Слова могут разделяться только пробелами. Для строк использовать только length, chr, ord.

Вопрос такой: как задать условие, чтобы избавиться именно от трёх слов наименьшей длины и как такие слова искать?

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


Гость






Основа будет выглядеть так:
...
s1 := '123 1234567 12 12345 123456 123 12 123456';
for kol := 1 to 3 do begin
min := 255; n1 := 1;
while slovo ( s1, n1, start ) <> '' do begin
if min > length(slovo(s1, n1, start)) then begin
i := start;
min := length(slovo(s1, n1, start));
end;
inc(n1);
end;

delete(s1, i, min);
end;
writeln(s1);
...


Правда, придется немного подкорректировать функцию Slovo, чтобы она возвращала еще и позицию начала текущего слова в строке:
function Slovo(s: string; n: integer; var start: integer): string;
const lim = [' ', ',', '!'] ;
var
ss: string;
k, c, i: integer;
begin
start := 0;
ss := ''; c := 1; k := 1;
while k <= length(s) do begin
while not (s[k] in lim) and (k <= length(s)) do begin
if c = n then begin
if start = 0 then start := k;
ss:=ss + s[k];
end;
inc(k);
end;
inc( c );

while (s[k] in lim) and (k <= length(s)) do inc (k);
end;
Slovo := ss;
end;

Использована не стандартная Delete, взята отсюда: Строки
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



- Текстовая версия 20.07.2025 2:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"