Re: Сворення рядка і витягання чисел з нього
shonrens, пропоную тобі чистий С++ варіант парсінгу без С-ішних функцій роботи з рядками
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
struct sIP{
int a;
int b;
int c;
int d;
};
int main(){
sIP pIP = {0};
int * ptr = (int *)&pIP;
stringstream ss(
"127.0.0.0\n"
"127.0.0,1\n"
"192.168.0.01\n"
"-50.0.2.15\n"
"1.2.3\n"
"255.00.255.255\n");
string line;
size_t size;
char delim;
while( getline(ss, line) )
{
stringstream s(line);
cout<<"CHECK FOR : "<<line<<" : ";
for( size = 0; size < 4; size++ )
{
if( !(s>>ptr[size]) )
break;
if( size < 3 )
if(!(s>>delim) )
break;
if( delim != '.' )
break;
if( ptr[size] < 0 )
break;
if( ptr[size] > 255 )
break;
}
if( size != 4 )
cout<<"INVALID IP STRING"<<endl;
else
cout<<"CORRECT IP STRING"<<endl;
}
return 0;
}
Перевірка http://codepad.org/e84Evq2M
Output:
CHECK FOR : 127.0.0.0 : CORRECT IP STRING
CHECK FOR : 127.0.0,1 : INVALID IP STRING
CHECK FOR : 192.168.0.01 : CORRECT IP STRING
CHECK FOR : -50.0.2.15 : INVALID IP STRING
CHECK FOR : 1.2.3 : INVALID IP STRING
CHECK FOR : 255.00.255.255 : CORRECT IP STRING