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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2015, 19:08   #1
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Вопрос Самое длинное слово (строки)

Решаю следующую задачу:

Дана строка. Найдите в этой строке самое длинное слово и выведите его. Если в строке несколько слов одинаковой максимальной длины, выведите первое из них. Решение оформите в виде функции LongestWord (S), возвращающей значение типа str.

Ввод
In a hole in the ground there lived a hobbit.

Вывод
ground

Это №111314 на informatics.mccme.ru

Вот мои попытки:
8 из 22
Код:
function LongestWord(s:StRing):StRing;

var rez, buf:StRing;
    count, index:LongInt;

begin
  index:= 1;
  while (index <= Length(s)) do
  begin
    if (s[index] = '.') then Delete(s, index, 1)
    else inc(index);
  end;
  index:= 1;
  rez:= '';
  while (s[index] <> ' ') do
  begin
    rez:= rez + s[index];
    inc(index);
  end;
  count:= Length(rez);
  Delete(s, 1, index);
  while (Length(s) > 0) do
  begin
    index:= 1;
    buf:= '';
    while (index <= Length(s)) and (s[index] <> ' ') do
    begin
      buf:= buf + s[index];
      inc(index);
    end;
    if (Length(buf) > count) then
    begin
      rez:= buf;
      count:= Length(buf);
    end;
    Delete(s, 1, index);
  end;
  LongestWord:= rez;
end;

var s:StRing;

begin
  readln(s);
  writeln(LongestWord(s));
end.
Большинство не пройденных тестов - Ошибка во время выполнения (подозреваю, что где-то за пределы строки вылез, тока не вижу, где)

12 из 22
Код:
var
    s: string;
    i, id, len, max, count: byte;
 
begin
    readln(s);
    while (Pos('.', s) > 0) do Delete(s, Pos('.', s), 1);
    while (Pos(',', s) > 0) do Delete(s, Pos(',', s), 1);
    while (s[1] = ' ') do Delete(s, 1, 1);
    while (s[Length(s)] = ' ') do Delete(s, Length(s), 1);
    while (Pos('  ', s) > 0) do Delete(s, Pos('  ', s), 1);
    len := length(s);
    max := 0; // ����� ������ �������� �����
    id := 0; // ������ ������ ������ �������� �����
    count := 0;
    for i:=1 to len do
        if s[i] <> ' ' then
            count := count + 1
        else begin
            if count > max then begin
                max := count;
                id := i - count;
            end;
            count := 0
        end;
 
    if count > max then begin // �������� ���������� �����
        max := count;
        id := len - count + 1;
    end;           
 
    writeln(copy(s,id,max));
end.
Прошу помочь мне разобраться с этой проблемой. Заранее спасибо
isst вне форума Ответить с цитированием
Старый 08.02.2015, 20:04   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
var
    s: string;
    i, id, len, max, count: byte;
 
begin
    readln(s);
   
    len := length(s);
    max := 0;
    id := 0; 
    count := 0;
    for i:=1 to len do
        if s[i] in ['a'..'z']+['A'..'Z'] then
            count := count + 1
        else begin
            if count > max then begin
                max := count;
                id := i - count;
            end;
            count := 0
        end;
 
    if count > max then begin 
        max := count;
        id := len - count + 1;
    end;           
 
    writeln(copy(s,id,max));
end.
Уже 21 из 22

Последний раз редактировалось Poma][a; 08.02.2015 в 20:07.
Poma][a вне форума Ответить с цитированием
Старый 08.02.2015, 20:08   #3
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Подмигивание

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Код:
var
    s: string;
    i, id, len, max, count: byte;
 
begin
    readln(s);
   
    len := length(s);
    max := 0;
    id := 0; 
    count := 0;
    for i:=1 to len do
        if not (s[i] in [#0..#255]-['a'..'z']-['A'..'Z']) then
            count := count + 1
        else begin
            if count > max then begin
                max := count;
                id := i - count;
            end;
            count := 0
        end;
 
    if count > max then begin 
        max := count;
        id := len - count + 1;
    end;           
 
    writeln(copy(s,id,max));
end.
Уже 21 из 22
Ром, спешу таки поставить тебя перед фактом. Во-первых, уже решил, спасибо за помощь. Во-вторых, твой код не проходит лишь из-за Byte, нужен Integer, т.к. там видимо строка есть больше 255 (сам на этом засыпался в последний раз) и, соответственно, компилятор PascalABC. Вот мой код, он 100%-ый:
Код:
var
  s: string;
  i, id, len, max, count: Integer;

begin
  readln(s);
  i := 1;
  while (i <= Length(s)) do
  begin
    if not (UpCase(s[i]) in ['A'..'Z', ' ']) then s[i] := ' '
    else inc(i);
  end;
  len := length(s);
  max := 0;
  id := 0;
  count := 0;
  for i := 1 to len do 
    if s[i] <> ' ' then
      count := count + 1
    else begin
      if count > max then begin
        max := count;
        id := i - count;
      end;
      count := 0
    end;
  if count > max then begin
    max := count;
    id := len - count + 1;
  end;			
  writeln(copy(s, id, max));
end.
Ну и твой, соответсна, не пашет на ФриПаске, лажает блок удаления всяких "небукв"

Последний раз редактировалось isst; 08.02.2015 в 20:11.
isst вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки - В заданном тексте найти самое длинное слово и самую длинную фразу (VS) Ольга Тимонова Помощь студентам 0 22.02.2012 15:19
С# найти самое длинное и самое короткое слово в строке и вывести их Зеленый Чай Помощь студентам 4 06.01.2012 18:40
[C] Удалить из строки самое длинное слово onewho Помощь студентам 2 29.09.2010 20:32
заменить самое длинное слово, на самое короткое в Delphi сер4ей Помощь студентам 5 05.03.2009 18:40
С++ Найти самое длинное слово строки k0z7_g0b1in Общие вопросы C/C++ 3 22.04.2007 17:37