問題 1116: IP判斷

解題思路

  • 使用string類型變量接受輸入值
  • 自定義字符串轉數字的函數,自定義flag變量1/0判斷ip串是否成立
  • 判斷是否有三個點分割,如果少於或大於,flag=0
  • 每一個點分割的字串用一個string接受數字字符
原題鏈接

代碼如下

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

//自定義字符轉數字
int stringToNum(string s){
    int ans=0;
    for(int i=0;i<s.length();i++){
        ans*=10;
        ans+=s[i]-'0';
    }
    return ans;
}
int main()
{
    string s;
    while(cin>>s){//輸入
        int pointSum=0;
        string a[4];
        int flag=1;
        for(int q=0;q<s.length();q++){//每一位都判斷
            char i=s[q];
            if(i=='.')pointSum++;//點的數量
            else if(i>='0' && i<='9')//在0-9之間的字符用string收集
            a[pointSum]+=i; 
            if(pointSum>3)//如果分割點數目不對,flag=0
            {
                flag=0;
                break;
            }
        }
        if(s.length()==a[0].length()+a[1].length()+a[2].length()+a[3].length()+3)//如果是一個純數字的ip,那麼其長度=字串長度+點的總數
        {
            for(int t=0;t<=3;t++){//對每一個字串進行判斷
                int a0=stringToNum(a[t]);
                if(a0<0 || a0>255)flag=0;//如果不在0-255之間,flag=0
            }
        }
        else flag=0;
        if(flag==1)printf("Y\n");//輸出
        else printf("N\n");
    }
    //system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章