Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
STAB
В общем, нужно составить программу для создания текста, состоящего из последних букв всех слов заданного текста.

Долго искал на форуме что-то подобное, ничего не нашёл. Рассчитываю на помощь форумчан
renesko1
Есть специальный раздел, где описаны способы разделения текста на слова. А теперь просто загоняешь последние буквы этих слов в файл...
STAB
Цитата(renesko1 @ 14.12.2008 21:16) *

Есть специальный раздел, где описаны способы разделения текста на слова. А теперь просто загоняешь последние буквы этих слов в файл...

А поточнее?
Lapp
Цитата(STAB @ 15.12.2008 1:09) *
А поточнее?
В FAQ заглядывал? Разбиение на слова. Все способы.
volvo
Цитата
Есть специальный раздел, где описаны способы разделения текста на слова
А зачем разбивать на слова, если нужно взять только последний символ каждого слова? Пробежать одним циклом по всей строке, и сделать одну единственную проверку для каждой ее буквы не проще?

const
delimiter = [' '];
var
s, res: string;
i: integer;
begin
s := 'Two consecutive single quotes are used to indicate' +
' a single quote in a string';
{ oeesedoeaeenag }
res := '';
for i := 1 to length(s) do begin
if ((i = length(s)) and not (s[i] in delimiter)) then res := res + s[i]
else
if ((i > 1) and (s[i] in delimiter) and not (s[i - 1] in delimiter))
then res := res + s[i - 1];
end;
writeln(res)
end.
STAB
О, спасибо!!!

но: а если в тексте есть точки, запятые, или два пробела?


program posl_bukv;
USES CRT;
const
probel = [' '];
var
s, res: string;
p:byte;
i: integer;
begin
ClrScr;
readln(s);
res := '';

{ Удаляем лишние пробелы }
repeat
p := Pos(' ', s); { Здесь 2 пробела !!! }
if p > 0 then Delete(s, p, 1);
until p = 0;

{ Удаляем пробел в начале строки }
if s[1] = ' ' then
Delete(s, 1, 1);

p := 1;
while p <= length(s) do begin
if (s[p] = ',') or (s[p] = '.') then delete(s, p, 1) { удаляем символ, если он точка или запятая }
else inc(p);
end;

for i := 1 to length(s) do begin
if ((i = length(s)) and not (s[i] in probel)) then res := res + s[i]
else
if ((i > 1) and (s[i] in probel) and not (s[i - 1] in probel))
then res := res + s[i - 1];
end;
writeln(res);
readln;
end.



Ещё раз спасибо volvo!!!!!!!!
volvo
Цитата
но: а если в тексте есть точки, запятые
Значит все эти символы занести в множество Delimiter, и все будет продолжать работать...
Цитата
или два пробела?
Хоть десять, это не важно.

Итого, всех изменений:
const
delimiter = [' ', '.', ','];
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.