입력한 문자열에서 숫자를 추출하여 더하는 계산기를 구현한다.
- 입력 요청: 사용자로부터 구분자와 양수로 구성된 문자열을 입력받는다.
- 예외 처리: 빈 문자열(
"")을 입력받는 경우0을 반환한다.
- 커스텀 구분자 확인: 입력이
//로 시작하면//{구분자}\n{값}형식을 검증한다. - 구분자 추출: 커스텀 구분자를 추출하거나 기본 구분자(
,또는:)를 반환한다. - 오류 처리: 선언 형식이 잘못된 경우
[ERROR] 커스텀 구분자 선언이 불완전합니다출력 후 프로그램을 종료한다. - 오류 처리: 커스텀 구분자가 공백이거나 여러 문자이거나 숫자이거나 소수점인 경우
[ERROR] 유효하지 않은 커스텀 구분자입니다출력 후 프로그램을 종료한다.
- 문자열 분리 실행: 추출된 구분자를 기준으로 문자열을 분리하여 숫자 토큰 리스트를 반환한다.
- 숫자 변환 및 검증: 모든 토큰을 숫자로 변환하며 각 토큰이 숫자 형식인지 검사한다.
- 오류 처리: 숫자가 아닌 문자가 포함된 경우
[ERROR] 숫자 형식이 아닙니다: '{토큰}'출력 후 프로그램을 종료한다. - 오류 처리: 음수(
-1,-2등)가 포함된 경우[ERROR] 음수는 허용되지 않습니다: '{토큰}'출력 후 프로그램을 종료한다.
- 오류 처리: 숫자가 아닌 문자가 포함된 경우
- 예외 처리: 연속 구분자 등(
1,,2)으로 인해 발생한 빈 문자열("") 토큰은0으로 처리한다. - 예외 처리: 공백(
" ")만 있는 토큰은0으로 처리한다. - 예외 처리:
"000"등 연속된 0은0으로 인식한다. - 합산 준비: 검증을 통과한 숫자들을 반환한다
- 값 처리: 검증된 숫자들을 모두 더하여 합계를 구한다.
- 예외 처리: 0은 덧셈에 영향을 주지 않는다.
- 결과 출력:
결과 : {합}형태로 출력한다. - 오류 출력:
[ERROR] {메시지}출력 후 프로그램을 종료한다.
| 구분 | 상황 | 처리 방식 |
|---|---|---|
| [ERROR] | 구분자 사이에 숫자가 아닌 문자가 포함된 경우 (1,a,3) |
[ERROR] 숫자 형식이 아닙니다: 'a' |
| [ERROR] | 구분자 사이에 음수가 포함된 경우 (1,-2,3) |
[ERROR] 음수는 허용되지 않습니다: '-2' |
| [ERROR] | 커스텀 구분자 선언이 불완전한 경우 (//[구분자]\n 형식 위반) |
[ERROR] 커스텀 구분자 선언이 불완전합니다 |
| [ERROR] | 커스텀 구분자가 공백인 경우(//\n) 커스텀 구분자가 여러 문자인 경우( //ab\n) 커스텀 구분자가 숫자인 경우( //1\n) 커스텀 구분자가 소수점인 경우( //.\n) |
[ERROR] 유효하지 않은 커스텀 구분자입니다 |
| [예외처리] | 구분자가 연속적으로 등장하는 경우 (1,,2) |
0으로 처리 |
| [예외처리] | 구분자 사이에 공백이 등장하는 경우 (1, ,3) |
0으로 처리 |
| [예외처리] | (*)구분자 사이에 0이 등장하는 경우 (1,0,3, 1,000,3) |
0으로 처리 |
| [예외처리] | 전체 문자열이 비어있는 경우 ("") |
0을 반환 |
(*) 구분자와 양수로 구성된 문자열임에도 0을 다루는 이유
- (프로그래밍) 숫자 변환 관습상 연속적인 0(ex. 000)은 0으로 처리
- (일관성) 구분자 사이에 아무것도 없는 빈 문자열을 0으로 처리하는 규칙 존재
- (실용성) 계산기에서 0은 덧셈에 영향을 끼치지 않음