사용자 이름 문자열이 있고 몇 가지 조건에 따라 사용자 이름이 유효한지 여부를 확인해야 한다고 가정합니다. 따라서 사용자 이름의 길이가 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