khi viết tên người hoặc tên đại lý Việt Nam được quy định viết hoa chữ cái đầu tất cae các âm tiết, còn lại là viết thường. Mỗi âm tiết cách nhau bởi một kí tự trắng. Yêu cầu: Hãy viết chương trình kiểm tra 1 xâu kí tự đã cho có đạt chuẩn danh từ hay không. Nếu chuẩn thì ghi kết quả là 1, ngược lại ghi kết quả là 0. Dữ liệu vào: Cho trong file văn bản DANHTU.INP, có cấu trúc: - dòng 1 ghi số tự nhiên n (n<10) - n dòng tiếp theo mỗi dòng ghi các xâu kí tự Dữ liệu ra: ghi ra file văn bản DANHTU.OUT, theo cấu trúc gồm n dòng, mỗi dòng ghi số 0 hoặc 1. VD DANHTU.INP DANHTU.OUT 3 1 Ton Ngo Khong 0 Tru Bat Gioi 0 SA tang HELPP
2 câu trả lời
uses crt;
var s: ansistring;
i, n, t: longint;
check: boolean;
begin
clrscr;
readln(t);
while t > 0 do begin
dec(t); readln(s);
check:=s[1] in ['A'..'Z'];
n:=length(s);
for i:=2 to n do
check:=check and( false
or ( (s[i] in ['a'..'z']) and (s[i - 1] <> #32) )
or ( (s[i] in ['A'..'Z']) and (s[i - 1] = #32) )
or ( (s[i] = #32) and (s[i - 1] <> #32) )
);
if check then writeln(1) else writeln(0);
end;
end.
Đây là bài của mình ko chắc là sẽ tối ưu.
Đầu tiên là mình sẽ kiểm tra các ký tự trong dãy xem có kí tự in hoa hay ko. Nếu có sẽ kiểm tra tiếp xem:
+ Trước đó có dấu cách hay không + Không quá 1 dấu cách
+ Đằng sau là kí tự viết thường
Nếu có 1 trong các điều kiện trên ko đúng thì sẽ dừng ngay vòng lặp và xuất ra là '0'; nếu đúng sẽ tiếp tục cho đến khi hết chuỗi và xuất ra là '1'
Chương trình
Program KT;
Var d : array[1..1000] of string;
i, n: integer;
fi, fo: text;
Function ktdt(s:string):boolean;
var i : integer;
a,b,c,d: boolean;
begin
ktdt := False;
If s[1] in ['A'..'Z'] then
For i := 1 to length(s)-1 do begin
a := s[i] in ['A'..'Z'];
b := s[i+1] in ['a'..'z'];
c := s[i-1] = ' ';
d := not(s[i-2]=' ');
if a then if b and c and d then ktdt := true
else begin ktdt := false; break; end;
end;
end;
BEGIN
assign(fi,'DANHTU.INP'); reset(fi);
assign(fo,'DANHTU.OUT'); rewrite(fo);
Readln(fi,n);
For i := 1 to n do readln(fi,d[i]);
For i := 1 to n do if ktdt(d[i]) then Writeln(fo, 1) else writeln(fo, 0);
close(fi); close(fo);
END.