LzzzOnly


私信TA

用户名:uq_62513724447

访问量:531

签 名:

等  级
排  名 874
经  验 3562
参赛次数 0
文章发表 5
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:
            将每一段数字提取出来,由string转化为int类型,进行判断;

            int k = 0: 用来判断是否成功提取每;     提取一次且数字满足IP条件, k++(共需四次判定操作:即k = 4时,IP正确)
注意事项:

参考代码:

#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
using namespace std;

// 判断每一次截取的数字
int judge(string str) {  
    int num = 0;
    for (int i = 0; i < str.size(); i++) { // 将string 转化为 int, 便于判断num是否符合0~255区间
        if (str[i] >= '0' && str[i] <= '9')
            num = num * 10 + (str[i] - '0');
        else
        return 0;
    }
    if (num > 255 || num < 0)    
        return 0;
    else
        return 1;
}


int main()
{
    string str;
    while (cin >> str) {

        int j = 0; // 标记上一个截取位置(便于截取)
        int k = 0;//截取次数:当截取成功发生四次,说明IP正确;
        for (int i = 0; i < str.size(); i++) {
            if (j != 0 && str[i] == '.') {
                if (judge(str.substr(j + 1, i - j - 1))) {
                    k++;
                    j = i;
                }
                else {
                    cout << "N" << endl;
                    break;
                 }
            }
            if (k == 0 && str[i] == '.') { //第一次截取
                if (judge(str.substr(j, j + i))) {
                    k++;
                    j = i;
                }
                else {
                cout << "N" << endl;
                break;
                }
           } 
           if (i == str.size() - 1) {
                if (judge(str.substr(j + 1, i - j)) == 0) {
                cout << "N" << endl;
                break;
                }
                else
                k++;
                }
            }
            if(k == 4)  //四次截取无意外,成功
            cout << "Y" << endl;    
            }
    return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »