В строке найти количество слов, которые начинаются и заканчиваются одной и той же буквой - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «В строке найти количество слов, которые начинаются и заканчиваются одной и той же буквой»

textual
Листинг программы
const N = 100;
type words = array[1..N] of string;
var input_str:string;   // исходная строка
var wrd_from_str:words;  // слова из строки
var wrd_count:byte; // кол-во слов
var i,j:integer;
 
//функция возвращает строку без "лишних пробелов".
function DeleteSpaces(s:string):string;
begin
while pos('  ',s)>0 do delete(s,pos('  ',s),1);
if s[1]=' ' then delete(s,1,1);
DeleteSpaces := s;
end;
 
 
 
//процедура разбивает строку на слова
//@param s - исходная строка
//@param wrd - получаемый массив слов
//@param cnt - количество полученных слов
procedure DivStrToWrd(s:string;var wrd:words;var cnt:byte);
    var i,b:integer;
     divs:set of char;
     w:boolean;
    begin
    cnt :=0;
    divs:=[' ',',','.','!','?',':',';']; //разделители
    w:=false;
    s:=s+' ';
    for i:=1 to length(s) do
     begin
     if w then
      begin
      if s[i] in divs then
       begin
       inc(cnt);
       wrd[cnt]:=copy(s,b,i-b);
       w:=false;
       end;
      end else
      begin
      if not (s[i] in divs) then
       begin
       w:=true;
       b:=i;
       end;
      end;
     end;
    end;
 
 
begin
 
input_str := 'ФЫВА ОЛДЖ  ЙЦУКЕН АББА ОЛДО ЕНГЩ НОН';
input_str := DeleteSpaces(input_str);
DivStrToWrd(input_str,wrd_from_str,wrd_count);
 
//ord(c) - код символа
 j:=0; // счетчик для слов,в которых 1-я буква = последней букве
for i:=1 to wrd_count do
 begin
  //writeln(wrd_from_str[i]);  -- для отладки
  //writeln(ord(wrd_from_str[i][1]));  -- для отладки
  if (ord(wrd_from_str[i][1]) = ord(wrd_from_str[i][length(wrd_from_str[i])])) then
  begin
  j:=j+1;
  writeln(wrd_from_str[i]);
  end;
 end;
 writeln(j);
end.

Объяснение кода листинга программы

const
N = 100; type words = array[1..N] of string; var input_str: string; wrd_from_str: words; wrd_count: byte; i, j: integer; function DeleteSpaces(s: string): string; procedure DivStrToWrd(s: string; var wrd: words; var cnt: byte); var i, b: integer; divs: set of char; w: boolean; begin cnt := 0; divs := [' ',',','.','!','?',':',';']; w := false; s := s + ' '; for i := 1 to length(s) do begin if w then begin if s[i] in divs then begin inc(cnt); wrd[cnt] := copy(s, b, i - b); w := false; end; end else begin if not (s[i] in divs) then begin w := true; b := i; end; end; end; end; j := 0; for i := 1 to wrd_count do begin if (ord(wrd_from_str[i][1]) = ord(wrd_from_str[i][length(wrd_from_str[i])])) then begin j := j + 1; writeln(wrd_from_str[i]); end; end; writeln(j); end; // ... остальной код end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы