Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions solutions/cpp/phone-number/1/phone_number.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#include "phone_number.h"
#include <cctype>
#include <stdexcept>

using namespace std;

namespace phone_number {

void phone_number::validate_and_clean(const string& raw_input) {
string digits = "";

// 1. Filtrar y extraer 煤nicamente los d铆gitos num茅ricos
for (char c : raw_input) {
if (isdigit(c)) {
digits += c;
} else if (isalpha(c)) {
// Si contiene letras, el n煤mero es inv谩lido
throw domain_error("El n煤mero no puede contener letras");
}
}

// 2. Validar longitud y c贸digo de pa铆s (Prefijo 1)
if (digits.length() == 11) {
if (digits[0] != '1') {
throw domain_error("El codigo de pais no es 1");
}
// Si el prefijo es correcto nos quedamos con los 10 d铆gitos locales
digits = digits.substr(1);
} else if (digits.length() != 10) {
throw domain_error("N煤mero de tel茅fono invalido");
}

// 3. Validar estructura NANP: NXX NXX-XXXX (Donde N es entre 2 y 9)
// El c贸digo de 谩rea no puede empezar con 0 o 1
if (digits[0] == '0' || digits[0] == '1') {
throw domain_error("El c贸digo de 谩rea no puede empezar con 0 o 1.");
}

// El c贸digo de central no puede empezar con 0 o 1
if (digits[3] == '0' || digits[3] == '1') {
throw domain_error("El c贸digo de central no puede empezar con 0 o 1.");
}

// Guardamos el resultado validado
m_cleaned_number = digits;
}

// Constructor
phone_number::phone_number(const string& raw_input) {
validate_and_clean(raw_input);
}

// Getter del n煤mero completo limpio
string phone_number::number() const {
return m_cleaned_number;
}

// Extrae los primeros 3 d铆gitos
string phone_number::area_code() const {
return m_cleaned_number.substr(0, 3);
}

}
24 changes: 24 additions & 0 deletions solutions/cpp/phone-number/1/phone_number.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#pragma once
#include <string>

namespace phone_number {

class phone_number {
private:
std::string m_cleaned_number;

// Funci贸n para aplicar las reglas estrictas de NANP
void validate_and_clean(const std::string& raw_input);

public:
// El constructor recibe la cadena sucia
explicit phone_number(const std::string& raw_input);

// M茅todo de acceso al n煤mero limpio
std::string number() const;

// Getters de partes
std::string area_code() const;
};

}