Giả sử chúng ta có danh sách tên đăng nhập và phải kiểm tra tính hợp lệ. Định nghĩa ngoại lệ ném ra khi độ dài tên < 5 ký tự. Trả về "Valid" nếu hợp lệ, "Invalid" nếu không hợp lệ, ném ngoại lệ nếu quá ngắn. Điều kiện hợp lệ:
- Độ dài ít nhất 5 ký tự
- Không có hai ký tự 'w' liên tiếp
Ví dụ: unames = ["amit", "to", "paul_tim", "greg_harry", "towwer"] → [Too short: 4, Too short: 2, Valid, Valid, Invalid]
Giải thuật
- Định nghĩa lớp BadLengthException lưu độ dài
- Hàm validation(u_name):
- Nếu độ dài < 5: ném BadLengthException(n)
- Kiểm tra cặp 'w' liên tiếp: nếu có, isValid = false
- Trả về isValid
- Main: duyệt unames, try-catch validation, in kết quả
Ví dụ minh họa
#include <iostream>
#include <vector>
#include <exception>
using namespace std;
class BadLengthException{
public:
int x;
BadLengthException(int n) { x=n; }
int what() const throw(){return x;}
};
bool validation(string u_name) {
bool isValid = true;
int n = u_name.length();
if(n < 5) { throw BadLengthException(n); }
for(int i = 0; i < n-1; i++) {
if(u_name[i] == 'w' && u_name[i+1] == 'w') { isValid = false; }
}
return isValid;
}
int main() {
vector<string> unames = {"amit", "to", "paul_tim", "greg_harry", "towwer"};
for(int i = 0; i < unames.size(); i++){
string u_name = unames[i];
try {
bool isValid = validation(u_name);
if(isValid) cout << "Valid" << '\n';
else cout << "Invalid" << '\n';
} catch (BadLengthException e) {
cout << "Too short: " << e.what() << '\n';
}
}
}
Đầu vào
{"amit", "to", "paul_tim", "greg_harry", "towwer"}
Đầu ra
Too short: 4 Too short: 2 Valid Valid Invalid