Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача
Форум «Всё о Паскале» > 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 = [' ', '.', ','];
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.