Ngôn ngữ pascalprogram DemSoTuTrongXau;
uses SysUtils;
var
s: string;
i, count: integer;
word: string;
isWord: boolean;
begin
// Nhập xâu kí tự
Write('Nhap vao mot xau ki tu: ');
ReadLn(s);
// Xóa các ký tự không phải chữ cái, số hoặc dấu cách
for i := Length(s) downto 1 do
if not (s[i] in ['a'..'z', '0'..'9', ' ']) then
Delete(s, i, 1);
// Khởi tạo biến đếm số từ
count := 0;
// Khởi tạo biến kiểm tra từ
isWord := false;
// Duyệt qua các ký tự trong xâu
for i := 1 to Length(s) do
begin
// Nếu ký tự hiện tại là một chữ cái, số hoặc dấu cách
if s[i] in ['a'..'z', '0'..'9', ' '] then
begin
// Nếu ký tự hiện tại là khoảng trắng, đồng thời từ đang được xét có độ dài lớn hơn 0
if s[i] = ' ' then
begin
if Length(word) > 0 then
begin
// Nếu từ đang xét có độ dài nhỏ hơn hoặc bằng 20
if Length(word) <= 20 then
begin
// Tăng biến đếm số từ
Inc(count);
end;
// Đặt lại biến kiểm tra từ
isWord := false;
// Xóa từ đang xét
word := '';
end;
end
else
begin
// Nếu ký tự hiện tại là một chữ cái hoặc số
// Nếu từ đang xét đã đủ dài hoặc không có từ nào đang được xét
if (Length(word) >= 20) or (not isWord) then
begin
// Đặt lại biến kiểm tra từ
isWord := true;
// Bắt đầu một từ mới
word := s[i];
end
else
begin
// Nếu độ dài từ đang xét chưa đủ, thêm ký tự hiện tại vào từ
word := word + s[i];
end;
end;
end;
end;
// Kiểm tra nếu từ đang xét có độ dài lớn hơn 0 sau khi duyệt qua toàn bộ xâu
if Length(word) > 0 then
begin
// Nếu từ đang xét có độ dài nhỏ hơn hoặc bằng 20
if Length(word) <= 20 then
begin
// Tăng biến đếm số từ
Inc(count);
end;
// Hiển thị số từ đã đếm được
WriteLn('So tu co trong xau: ', count);
end.