В строке найти количество слов, которые начинаются и заканчиваются одной и той же буквой - Pascal ABC
Формулировка задачи:
Решение задачи: «В строке найти количество слов, которые начинаются и заканчиваются одной и той же буквой»
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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д