Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2009, 07:27   #1
Bek
 
Регистрация: 26.02.2009
Сообщений: 5
Смущение обработка строки

Новичок ломает голову.
Дан текст. Найти самое длинное слово, начинающийся на гласные и записать ,это слово наоборот . Заранее благодарен.
Bek вне форума Ответить с цитированием
Старый 27.02.2009, 12:46   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Итак. Раз нужны гласные, то определим множество гласных:
Код:
const mn=['a','e','i','o','u','y'];
Слова разделяются пробелами и, может, еще чем-нибудь. Определим множество разделителей:
Код:
razd = [' ','.',',','!','&',';',':'];
У нас есть исходная строка. Нам понадобятся еще строка, в которой будет храниться текущее самое длинное слово. А также строка-буфер.
Код:
var
s,wrd,buf : string;
Т.к. мы будем идти по строке, но нужен счетчик. И еще переменная для длины строки (исходной).
Код:
i,len : integer;
Началась программа. Чистим экран. Далее читаем строку.
Код:
readln(s);
Счетчик пока на первом символе. В len занесем длину строки.
Код:
i:=1;
len:=length(s);
Изначально wrd пустой.
Код:
wrd := '';
Теперь сам цикл. Идем по строке.
Код:
while i<=len do
Пропустим все разделители.
Код:
 while (s[i] in razd) and (i<=len) do inc(i);
Сейчас счетчик указывает на первый символ слова. нужно проверить, является ли он гласной.
Код:
if not (s[i] in mn) then
Если нет, то пропускаем это слово:
Код:
while (not(s[i] in razd)) and (i<=len) do inc(i)
Если является, то прочитаем это слово в буфер.
Код:
 else
  begin
  buf := '';
  while (not(s[i] in razd)) and (i<=len) do
   begin
   buf := buf + s[i];
   inc(i);
   end;
Теперь проверим, длиннее ли оно того слова, которое было запомнено ранее:
Код:
if length(buf)>length(wrd) then
и если да, то
Код:
wrd := buf;
Цикл закончен. Теперь нужно вывести это слово наоборот.
Код:
for i:=length(wrd) downto 1 do
 write(wrd[i]);

Вот и все. Теперь соберите все вместе.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
Обработка строки Staxxx Общие вопросы C/C++ 2 03.01.2009 12:30
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
Строки в Паскале Обработка текста quqer Помощь студентам 3 11.03.2008 11:22
Обработка XML строки при загрузке dbf в Delphi SereJa1020 БД в Delphi 1 18.12.2007 18:28