Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > [Исходники][Delphi][Пример]Нахождение в строке слов с одинаковыми первой и последней буквой


Автор: THandle 26.3.2008, 15:17
Задание.

Дана строка, состоящая  из слов, разделенных пробелами(одним или несколькими).
Найти количество слов, которое начинаются и заканчиваются одной и той же буквой.


Решение.

Код

program problem;

{$APPTYPE CONSOLE}

var
  sData, sSlovo: string;
  i, k : integer;

function IsSame(s : string) : boolean;
begin
  result := false;
  if s[1] = s[length(s)] then
    result := true;
end;

begin
  Write('STROKA: ');
  Readln(sData);
  sData := sData + ' ';
  k := 0;
  for i := 1 to length(sData) do
    if sData[i] <> ' ' then
      sSlovo := sSlovo + sData[i]
    else
      if sSlovo <> '' then
        begin
          if IsSame(sSlovo) then
            inc(k);
          sSlovo := '';
        end;
  write(k);
  Readln;
end.




Объяснение.


sData - строка, вводимая с клавиатуры.

sSlovo - текущее слово из введенной строки.

k - счетчик слов, начинающихся и заканчивающихся одной и той же буквой.

i - счетчик цикла.



Код

  Write('STROKA: ');
  Readln(sData);
  sData := sData + ' ';
  k := 0;


Вводим нашу строку. Присваиваем счетчику слов с одинаковой первой и последней буквой значение 0.


Код

  for i := 1 to length(sData) do


В цикле от 1 до конца строки делаем следующее:

Код

    if sData[i] <> ' ' then
      sSlovo := sSlovo + sData[i]


Если символ строки sData с индексом i не равен пробелу, то 
прибавляем к текущему слову этот символ, иначе делаем следующее:


Код

    else
      if sSlovo <> '' then
        begin
          if IsSame(sSlovo) then
            inc(k);
          sSlovo := '';
        end;




Код

if sSlovo <> '' then


Если текущее слово не пустое, то вызываем следующую функцию:



Код

function IsSame(s : string) : boolean;
begin
  result := false;
  if s[1] = s[length(s)] then
    result := true;
end;


Она проверяет одинаковы ли первый и последний символы слова.
Если одинаковы, то функция возвращает true, и мы
увеличиваем наш счетчик k на 1:

Код

            inc(k);


Далее независимо от того что вернула функции IsSame очищаем текущее слово:

Код

         sSlovo := '';


Далее продолжается цикл.


После завершения цикла и подсчета количества слов с одинаковыми первой и последней буквой делаем следующие действия:

Код


  write(k);
  Readln;


Выводим результат, то есть количество слов с одинаковыми первой и последней буквой.
Далее ждем ввода с клавиатуры, чтобы завершить программу.


Конец.




В прикрепленном файле находится проект данного примера.

Автор: MetalFan 26.3.2008, 16:00
Цитата(THandle @  26.3.2008,  15:17 Найти цитируемый пост)
  result := false;
  if s[1] = s[length(s)] then
    result := true;

к чему лишние телодвижения?
достаточно
Код

  result := s[1] = s[length(s)];

Автор: THandle 26.3.2008, 16:05
MetalFan, согласен, что достаточно, но:

Все это пишется для совсем начинающих, которые, как мне кажется могут не понять смысл такай записи.

Автор: MetalFan 26.3.2008, 17:53
тогда уж более наглядна была бы запись вида:
Код
  if s[1] = s[length(s)] then
    result := true
  else
    result := false;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)