题目1203:IP地址

题目:

http://ac.jobdu.com/problem.php?pid=1203

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:3052

解决:1504

题目描述:

    输入一个ip地址串,判断是否合法。

输入:

    输入的第一行包括一个整数n(1<=n<=500),代表下面会出现的IP地址的个数。
    接下来的n行每行有一个IP地址,IP地址的形式为a.b.c.d,其中a、b、c、d都是整数。

输出:

    可能有多组测试数据,对于每组数据,如果IP地址合法则输出"Yes!”,否则输出"No!”。

样例输入:
2
255.255.255.255
512.12.2.3
样例输出:
Yes!
No!
提示:

合法的IP地址为:
a、b、c、d都是0-255的整数。

来源:
2006年华中科技大学计算机保研机试真题
答疑:
  解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7926-1-1.html
代码:
#include <cstdio>
#include <cstdlib>
using namespace std;
bool check_valid(char *str){
    int count = 0;
    char *begin = str;
    bool end_flag = false;
    for(char *p = str; !end_flag; ++p){
        if('.' == *p || '' == *p){
            if(*p == ''){
                end_flag = true;
            }
            if(p <= begin){
                return false;
            }
            *p = '';
            long n = strtol(begin, &p, 10);
            if(n > 255 || n < 0){
                return false;
            }
            begin = p + 1;
            ++count;
            if(count > 4){
                return false;
            }
        }
    }
    return count == 4;
}

int main() {
    int n = 0;
    while(scanf("%d
", &n) != EOF && n > 0){
        char str[256] = {0};
        for(int i = 0; i < n; ++i){
            scanf("%s", str);
            printf("%s
", check_valid(str) ? "Yes!" : "No!");
        }
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/moxiaopeng/p/5079099.html