Advertisement
AntonioVillanueva

Lectura de Ips

Sep 8th, 2016
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. //#define DEBUGGER // Solo en modo DEBUG
  5. using namespace std;
  6. //----------------------------------------------------------------------------
  7. typedef struct {unsigned short pos[4];}s_ip;
  8. //----------------------------------------------------------------------------
  9. //Clase para leer una direccion IP aaa.bbb.ccc.ddd
  10. class leeIp{
  11.     public:
  12.     bool lectura();
  13.    
  14.     private:
  15.     bool test(string s);//Analiza si los datos son correctos
  16.     s_ip ip;//structura contenedora de la direccion ip
  17. };
  18. //----------------------------------------------------------------------------
  19. bool leeIp::test(string s){//Analiza si los datos son correctos
  20.    
  21.     string::iterator it=s.begin();
  22.     const string MODEL ("aaa.bbb.ccc.ddd");
  23.     string buffer("");
  24.     int p=0;
  25.    
  26.     for (p=0,it=s.begin();it!=(s.end());it++){
  27.         if (*it=='.'){p++ ;}//Cuenta puntos maximo 3 !
  28.         if (p>3){cout <<"Error demasiados puntos "<<endl;return false;}    
  29.         //Solo valores numericos o puntos
  30.         if ((!isdigit (*it)) && (*it!='.')){cout<<"Error invalid value "<<*it<<endl;return false;}
  31.     }
  32.        
  33.     //Evita cadena vacia o demasiado grande
  34.     if (s.empty() ||s.size()> (MODEL.size()) || (s.size()<7)){cout<<"Error size "<<endl;return false;}
  35.        
  36.     //Escribe datos
  37.     for (p=0, it=s.begin();it!=(s.end());it++)
  38.     {
  39.         if ((*it!='.')||(it== (s.end()))) {buffer+=*it;}
  40.         else {
  41.                 ip.pos[p]=stoi (buffer);
  42.                 buffer.clear();
  43.                 p++;
  44.             }
  45.     }
  46.     ip.pos[p]=stoi (buffer);
  47.    
  48. #if defined (DEBUGGER) 
  49.     for (size_t i=0;i<4;i++){//Muestra valores
  50.         if(ip.pos[i]>255){cout <<"Error valor ip invalido "<<ip.pos[i]<<endl;return false;}
  51.         cout <<ip.pos[i];
  52.                 if (i<3){cout<<".";}       
  53.         }
  54. #endif     
  55.     return true;
  56. }
  57. //----------------------------------------------------------------------------
  58. bool leeIp::lectura(){
  59.     string buffer;
  60.     cout<<" IP :";cin>>buffer;
  61.     return test(buffer);//Analiza si los datos son correctos       
  62.     };
  63.  
  64. //----------------------------------------------------------------------------
  65. int main (){
  66.     leeIp c_ip;
  67.    
  68.     while (!(c_ip.lectura())){};//Pide si los datos son incorrectos
  69.    
  70.    
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement