Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача

Автор: STAB 15.12.2008 0:49

В общем, нужно составить программу для создания текста, состоящего из последних букв всех слов заданного текста.

Долго искал на форуме что-то подобное, ничего не нашёл. Рассчитываю на помощь форумчан

Автор: renesko1 15.12.2008 1:16

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

Автор: STAB 15.12.2008 5:09

Цитата(renesko1 @ 14.12.2008 21:16) *

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

А поточнее?

Автор: Lapp 15.12.2008 8:36

Цитата(STAB @ 15.12.2008 1:09) *
А поточнее?
В FAQ заглядывал? http://forum.pascal.net.ru/index.php?showtopic=6972

Автор: volvo 15.12.2008 14:40

Цитата
Есть специальный раздел, где описаны способы разделения текста на слова
А зачем разбивать на слова, если нужно взять только последний символ каждого слова? Пробежать одним циклом по всей строке, и сделать одну единственную проверку для каждой ее буквы не проще?

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 17.12.2008 5:25

О, спасибо!!!

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


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 17.12.2008 5:59

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

Итого, всех изменений:
const
delimiter = [' ', '.', ','];