[Buổi 20][Chuỗi][HW] Bài 5: Chuẩn hóa địa chỉ email cơ bản


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Chuẩn hóa địa chỉ email cơ bản

Bối cảnh

Một hệ thống nội bộ nhận địa chỉ email dạng đơn giản và cần tạo canonical form. Luật của phiên bản Foundation:

  • Phải có đúng một ký tự @.
  • Phần local trước @ không rỗng và chỉ chứa chữ cái, chữ số, ., _, -.
  • Domain sau @ không rỗng, chỉ chứa chữ cái, chữ số, ., -.
  • Domain phải có ít nhất một dấu ., không bắt đầu/kết thúc bằng ., và không chứa ...
  • Local được giữ nguyên casing; domain chuyển toàn bộ về lowercase.

Nếu sai in INVALID, nếu đúng in canonical email. Bài Medium yêu cầu dùng find() để xác định delimiter và substr() để tách hai state, sau đó validation riêng từng phần. Đây chưa phải parser email đầy đủ theo RFC; mục tiêu là học chia nhỏ requirement và tránh thao tác chuỗi mơ hồ.

Bài cũng kiểm tra ranh giới giữa validationcanonicalization. Một domain uppercase vẫn hợp lệ và chỉ được lowercase sau khi đã qua các luật cấu trúc. Ngược lại, không được "sửa" một domain sai như .Example..COM bằng cách normalize rồi cho qua. Pipeline nên giữ dữ liệu thô đủ lâu để phát hiện lỗi trước khi biến đổi.

Yêu cầu

  1. Đọc một dòng email.
  2. Xác nhận đúng một @.
  3. Validate local và domain theo luật.
  4. Lowercase domain, giữ local.
  5. In canonical hoặc INVALID.

Input

Một dòng email.

Output

INVALID hoặc email canonical.

Ràng buộc

|s|≤500.

Ví dụ 1

Input

User.Name@TNUT.EDU.VN

Output

User.Name@tnut.edu.vn

Giải thích

Chuỗi có đúng một @. Local User.Name chỉ chứa chữ và dấu chấm nên hợp lệ. Domain TNUT.EDU.VN có dấu chấm hợp lệ, không có ..; sau lowercase trở thành tnut.edu.vn. Local giữ nguyên casing, nên output canonical là User.Name@tnut.edu.vn.

Ví dụ 2

Input

abc@@example.com

Output

INVALID

Giải thích

Input có hai ký tự @. Ngay bước tách delimiter, chương trình phát hiện một @ thứ hai sau vị trí đầu tiên, nên cấu trúc không thể chia thành đúng local/domain. Không cần kiểm tra các rule khác và output là INVALID.

Thông tin học tập

  • Module: M06
  • Buổi: B20
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: std::string, find, substr, validation, lowercase domain
  • Giới hạn kiến thức: B01-B20
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo