| 
| 
 | Вопрос # 2 324/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!как определить наибольшее количество одинаковых символов идущих в строке подряд?
 
|  |   Вопрос задала: Milady (статус: Посетитель)Вопрос отправлен: 20 января 2009, 17:05
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Ну, не знаю. Сильно не отлаживал. Написал минут за 5, сильно не пинайте. Всё же лучше, чем ничего...
 {как определить наибольшее количество
 одинаковых символов идущих в строке подряд?}
 
program p2324;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
// Функция подсчёта наибольшего количество одинаковых символов,
// идущих в строке подряд
function SuccessivelySymbols(const S: string): Integer;
var
  Index, Max: Integer;
  Symbol: Char;
begin
  Result:= 0;
 
  if S = ''
    then Exit;
 
  Max:= 1;
  Symbol:= S[1];
  Result:= 1;
 
  for Index:= 2 to Length(S) do
    if S[Index] = Symbol
      then Inc(Max)
      else begin
             if Max > Result
               then begin
                      Result:= Max;
                      Max:= 1;
                    end;
             Symbol:= S[Index];
           end;
 
  if Max > Result
    then Result:= Max;
end;
 
var
  S: string;
 
begin
  Write('Enter the string: ');
  ReadLn(S);
 
  WriteLn('MaxCount = ', SuccessivelySymbols(S));
 
  ReadLn;
end.
 Наверняка, можно как-то покороче, но заморачиваться с оптимизацией неохота. Вроде работает.
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 20 января 2009, 20:48
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 28 января 2009, 22:41; участников в обсуждении: 2. 
|   | Milady (статус: Посетитель), 21 января 2009, 13:46 [#1]:Спасибо!!!!!!!!! |  
|   | Milady (статус: Посетитель), 28 января 2009, 09:53 [#2]:А можно ли еще вывести символ который повторяется? |  
|   | min@y™ (статус: Доктор наук), 28 января 2009, 11:07 [#3]: Цитата: А можно ли еще вывести символ который повторяется?
 
 
 
 {как определить наибольшее количество
 одинаковых символов идущих в строке подряд?}
 
program p2324;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
// Функция подсчёта наибольшего количество одинаковых символов,
// идущих в строке подряд
function SuccessivelySymbols(const S: string;
                             var MaxSymbol: Char { <--- добавил }): Integer;
var
  Index, Max: Integer;
  Symbol: Char;
begin
  Result:= 0;
 
  if S = ''
    then begin
           MaxSymbol:= #0; // <--- добавил
           Exit;
         end;
 
  Max:= 1;
  Symbol:= S[1];
  MaxSymbol:= S[1]; // <--- добавил
  Result:= 1;
 
  for Index:= 2 to Length(S) do
    if S[Index] = Symbol
      then Inc(Max)
      else begin
             if Max > Result
               then begin
                      Result:= Max;
                      MaxSymbol:= Symbol; // <--- добавил
                      Max:= 1;
                    end;
             Symbol:= S[Index];
           end;
 
  if Max > Result
    then Result:= Max;
end;
 
var
  S: string;
  Count: Integer; // <--- добавил
  MaxSymbol: Char; // <--- добавил
 
begin
  Write('Enter the string: ');
  ReadLn(S);
 
  Count:= SuccessivelySymbols(S, MaxSymbol); // <--- добавил
  WriteLn('MaxCount = ', Count); // <--- заменил
 
  if Count <> 0
    then WriteLn('Symbol: "', MaxSymbol, '"'); // <--- добавил
 
  ReadLn;
end.Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Milady (статус: Посетитель), 28 января 2009, 22:41 [#4]:Спасибо вы нас как всегда спасли |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |