uses crt;
var t,s,m:string; k,n,i:longint;
begin
clrscr;
write('S=');readln(s);
write('k=');readln(k);
n:=length(s);
for i:=1 to n+1 do
if (s[i]<>'#')and(i<>n+1) then t:=t+s[i] else
begin
if length(t)>length(m) then m:=t; t:='';
end;
n:=length(m);
for i:=1 to n do
if (ord(m[i])>64)and(ord(m[i])<91) then
if ord(m[i])-k<65 then write(chr(ord(91-(65-(ord(m[i])-k)))))
else write(chr(ord(m[i])-k));
readln
end.
///
Giai thich:
Cái tìm xâu dài nhất :
Là mình tách những đoạn kí tự được ngăn cách bởi # ra
-thấy cái nào dài nhất thì lấy
-mình chạy từ đầu nên sẽ lấy xâu dài nhất đàu tiên
Chổ chuyển đổi đó là:
-Mình dùng bản ascii
ORD:lấy số thứ tự của một kí tự trong bảng.
CHR:ngược lại
Ở đây có 2 trường hợp:
Từ đầu ra sau:
VD S=A k=1 thì ra Z
lấy 91-(65-ord(m[i])-k))
VD là S=A và k=1 là 65(tức là A)-1 là bằng 64
ta lấy 65-64=1
ta lấy 91-1 ra 90
chr(90)=Z
Trường hợp còn lại
Là chr(ord(m[i])-k) là ra
Nếu các bạn không hiểu hoặc code mình có sai chỗ nào thì để lại bình luận nhé
Còn cái bảng ascii là vào Tools – ascii table
Ở đay mình có 3 ví dụ: