21 Востаннє редагувалося -=ЮрА=- (08.11.2015 20:50:10)

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

Подякували: shonrens1