diff --git a/cpp/phone-number/phone_number.cpp b/cpp/phone-number/phone_number.cpp index 2e7adac..35785b3 100644 --- a/cpp/phone-number/phone_number.cpp +++ b/cpp/phone-number/phone_number.cpp @@ -1,13 +1,33 @@ #include "phone_number.h" #include -#include +#include using namespace std; +static const int number_size = 10; +static const int area_code_size = 3; +static const int first_part_size = 3; + +static const char invalid_number[] = "0000000000"; + + phone_number::phone_number(const string &str) { - static const string invalid_number = "0000000000"; + number_.resize(str.size()); + string::iterator iter = copy_if(str.cbegin(), str.cend(), + number_.begin(), static_cast(isdigit)); + number_.resize(distance(number_.begin(), iter)); + + if (number_.size() == number_size + 1 && number_.front() == '1') { + + number_.erase(number_.begin()); + } + + if (number_.size() != number_size) { + + number_ = invalid_number; + } } string phone_number::number() const @@ -17,10 +37,13 @@ string phone_number::number() const string phone_number::area_code() const { - return area_code_; + return number_.substr(0, area_code_size); } phone_number::operator string() const { - return number_; + return string("(") + area_code() + ") " + + number_.substr(area_code_size, first_part_size) + + '-' + + number_.substr(area_code_size + first_part_size, string::npos); } diff --git a/cpp/phone-number/phone_number.h b/cpp/phone-number/phone_number.h index f18f51b..599f766 100644 --- a/cpp/phone-number/phone_number.h +++ b/cpp/phone-number/phone_number.h @@ -1,10 +1,11 @@ #pragma once +#define EXERCISM_RUN_ALL_TESTS + #include class phone_number { - std::string area_code_; std::string number_; public: