利用C++字符串string类判断IP地址格式是否合法

利用C++字符串string类判断IP地址格式是否合法 

IP地址格式:a.b.c.d ,范围为:0.0.0.0~255.255.255.255

利用string类的成员函数有:

  1. 查找(find)

语法:

  size_type find( const basic_string &str, size_type index );
  size_type find( const char *str, size_type index );
  size_type find( const char *str, size_type index, size_type length );
  size_type find( char ch, size_type index );

find()函数:

  • 返回str在字符串中第一次出现的位置(从index开始查找)如果没找到则返回string::npos,
  • 返回str在字符串中第一次出现的位置(从index开始查找,长度为length)。如果没找到就返回string::npos,
  • 返回字符ch在字符串中第一次出现的位置(从index开始查找)。如果没找到就返回string::npos

例如,

 

    string str1( "Alpha Beta Gamma Delta" );
    unsigned int loc = str1.find( "Omega", 0 );
    if( loc != string::npos )
      cout << "Found Omega at " << loc << endl;
    else
      cout << "Didn't find Omega" << endl;
  1. 长度(length)

语法:

  size_type length();

length()函数返回字符串的长度. 这个数字应该和size()返回的数字相同.

#include 
#include
using namespace std;
//记录字符'.'第一次出现的位置和当前片段的长度;
int point = 0;
//IP格式:a.b.c.d
//判断当前片段:a,b,c是否合格
bool value(string pa, string &temp)
{
    point = pa.find('.');
    cout << pa << "\tpoint=" << point << endl;
    if(point < 1)
        return 0;

    int sum = 0;
    for(int i = 0; i < point; i++)
    {
        sum = sum * 10 + int(pa[i] - 48);
    }
    cout << "sum=" << sum << endl;
    if(0 < sum < 256)
    {
        temp = &pa[point + 1];
        cout << temp << endl;
        return 1;
    }
    else
        return 0;
}
//判断当前片段:d是否合格
bool value(string pa)
{
    cout << pa << "\tpoint=" << point << endl;
    point = pa.length();
    if((point < 1) || (point > 3))
        return 0;

    int sum = 0;
    for(int i = 0; i < point; i++)
    {
        sum = sum * 10 + int(pa[i] - 48);
    }
    cout << "sum=" << sum << endl;
    if(0 < sum < 256)
    {
        return 1;
    }
    else
        return 0;
}
int main()
{
    string ip, pb, pc, pd;
    int n = 0;
    cin >> n;
    while (n--)
    {

        cin >> ip;
        int len = ip.length();
        cout << "len=" << len << endl;
        //IP地址长度范围:7~15
        if((len < 7) || (len > 15))
        {
            cout << "No" << endl;
            continue;
        }
        else
        {
            if(value(ip, pb) && value(pb, pc) && value(pc, pd) && value(pd))
                cout << "Yes" << endl;
            else
            {
                cout << "No" << endl;
                continue;
            }
        }
    }
    return 0;
}

 

你可能感兴趣的:(C++,网络,c++,字符串,网络)