사용자 이름 문자열이 있고 몇 가지 조건에 따라 사용자 이름이 유효한지 여부를 확인해야 한다고 가정합니다. 따라서 사용자 이름의 길이가 5자 미만일 때 throw되는 예외를 정의해야 합니다. 유효한 사용자 이름에 대해 "유효함"을 반환하고 잘못된 사용자 이름에 대해 "무효"를 반환하고 더 작은 사용자 이름에 대해 예외를 throw해야 합니다. 유효한 사용자 이름 조건은 -
-
사용자 이름은 5자여야 합니다.
-
사용자 이름에 두 개의 연속 'w'가 있으면 안 됩니다.
따라서 입력이 unames =["amit", "to", "paul_tim", "greg_harry", "towwer"]와 같으면 출력은 [Too short:4, Too short:2, Valid, Valid , Invalid] 처음 두 개는 너무 작고 마지막 하나에는 두 개의 연속 'w'가 있기 때문입니다. 다른 사람들은 괜찮습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
BadLengthExcaption이라는 예외 정의
-
메시지 길이를 반환합니다.
-
validation() 함수를 정의하면 u_name이 필요합니다.
-
isValid :=참
-
n :=u_name의 크기
-
n <5인 경우:
-
BadLengthException(n)
발생
-
-
initialize i :=0의 경우 i
-
u_name[i]이 'w'와 같고 u_name[i + 1]이 'w'와 같으면:
-
isValid :=거짓
-
-
-
유효한 반환
-
기본 방법에서 다음을 수행합니다.
-
unames의 모든 사용자 이름 u_name에 대해 수행
-
확인(u_name)
-
유효한 경우 유효한 인쇄 유효
-
그렇지 않으면 잘못된 인쇄 INVALID
일 때 -
그렇지 않으면 길이가 작은 경우 너무 작음
-
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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'; } } }
입력
{"amit", "to", "paul_tim", "greg_harry", "towwer"}
출력
Too short: 4 Too short: 2 Valid Valid Invalid