exercism-solutions/cpp/phone-number/phone_number.cpp

48 lines
1.1 KiB
C++

#include "phone_number.h"
#include <algorithm>
#include <cctype>
using namespace std;
static const size_t number_size = 10;
static const size_t area_code_size = 3;
static const size_t exchange_size = 3;
static const char invalid_number[] = "0000000000";
phone_number::phone_number(const string &str)
{
number_.resize(str.size());
string::iterator iter = copy_if(str.cbegin(), str.cend(),
number_.begin(), static_cast<int (*)(int)>(isdigit));
number_.resize(distance(number_.begin(), iter));
if (number_.size() == number_size + 1 && number_.front() == '1') {
number_.erase(number_.begin());
}
else if (number_.size() != number_size) {
number_ = invalid_number;
}
}
string phone_number::number() const
{
return number_;
}
string phone_number::area_code() const
{
return number_.substr(0, area_code_size);
}
phone_number::operator string() const
{
return string("(") + area_code() + ") "
+ number_.substr(area_code_size, exchange_size)
+ '-'
+ number_.substr(area_code_size + exchange_size);
}