Hướng giải quyết cho bài toán cipher encryption
Mình đang học java và đang bế tắc vs bài tập này. Mong mọi người định hướng cách giải quyết vấn đề này:
Caesar cipher is a substitution cipher method which was used by Julius Caesar to protect
private information from the enemies. By replace each letter in the original letter with a letter
some fixed positions down the alphabet, the result is meaningless to anyone who doesn’t
know the secret.
Write a program that apply Caesar cipher on a message taken from user and print the
result. Assuming all input letters are lower case. The letters shift are provided as below.
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Cipher: DEFGHIJKLMNOPQRSTUVWXYZABC
E.g. Original message: hello world
Encrypted message: khoor zruog
Cơ bản như sau:
index = 1 -> A
index = 2 -> B
index = 3 -> C
…
Theo input thì A sẽ được chuyển thành D, tức là chỉ số index được cộng thêm cho 3. Bảng ký tự alphabet có 26 ký tự, cho nên khi index + 3 > 26 thì quay ngược trở về đầu bảng.
index_của_ký_tự_được_mã_hóa = (index_của_ký_tự_ban_đầu + 3) % 26
P.s Cần lưu ý trường hợp (23 + 3) % 26, công thức tổng quát nhất là:
index_của_ký_tự_được_mã_hóa = 1 + (index_của_ký_tự_ban_đầu + 3 - 1) % 26
Vì đề bài yêu cầu chỉ nhập vào chữ thường nên bạn dùng hàm lấy mã ASCII của từng kí tự, tính toán với cái mã đó, rồi đổi kết quả vừa tính được thành kí tự để xuất ra.
Khoảng cách giữa kí tự plain với kí tự được mã hóa gọi là độ dời. Trong bài này thấy từ ‘h’ dịch lên 3 đơn vị thành ‘k’ thì độ dời là 3.
Gửi bạn cái demo để tham khảo.
tks b nhé
Khi mình nhập vào dấu cách thì nó ra chữ c . làm sao để xử lý vấn đề này vậy b?
}
check nếu không phải là kí tự chữ cái thì k mã hóa và giải mã char đó thôi
tks b nhé