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

题目描述:

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

输入:

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

输出:

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

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

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

来源:
2006年华中科技大学计算机保研机试真题
解1:
根据.的位置直接判断,输入的格式是确定的。只要判断四个数字的正确性。
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int main() {
  5. int n;
  6. while (scanf("%d", &n) != EOF) {
  7. while (n--) {
  8. char ip[];
  9. scanf("%s", ip);
  10. int len = strlen(ip);
  11. int count = ;
  12. int num = ;
  13. for (int i = ; i < len; i++) {
  14. if (ip[i] == '.') {
  15. if (num >= && num <= ) {
  16. count++;
  17. }
  18. num = ;
  19. } else {
  20. num = num * + ip[i] - '';
  21. }
  22. }
  23. if (num >= && num <= ) {
  24. count++;
  25. }
  26. if (count == ) {
  27. printf("Yes!\n");
  28. } else {
  29. printf("No!\n");
  30. }
  31. }
  32. }
  33. return ;
  34. }

解2:

C++中没有split(分割字符串)函数。因此可以构造一个。使用起来就比较方便。不过对于该题而言,这样略显复杂。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <string>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. char ip[];
  10.  
  11. void split(const string& s, const string& c, vector<string>& v)
  12. {
  13. string::size_type last, index;
  14. index = s.find(c);
  15. last = ;
  16. while(string::npos != index)
  17. {
  18. v.push_back(s.substr(last, index-last));
  19.  
  20. last = index + c.size();
  21. index = s.find(c, last);
  22. }
  23. if(last != s.length())
  24. v.push_back(s.substr(last));
  25. }
  26.  
  27. bool isValid(char str[], vector<string> &ret)
  28. {
  29. int len=strlen(str);
  30. if(len>) return false;
  31.  
  32. string s=str;
  33. string delim=".";
  34.  
  35. split(s, delim, ret);
  36.  
  37. int size=ret.size();
  38. for(int i=; i<size; i++)
  39. {
  40. int num=atoi(ret[i].c_str());
  41. if(num< || num>)
  42. return false;
  43. }
  44.  
  45. return true;
  46. }
  47.  
  48. int main()
  49. {
  50. vector<string> ret;
  51. int n;
  52. while(scanf("%d", &n)!=EOF)
  53. {
  54. while(n--)
  55. {
  56. if(ret.empty()!=true)
  57. ret.clear();
  58. scanf("%s", ip);
  59. bool isip=isValid(ip, ret);
  60. if(isip)
  61. printf("Yes!\n");
  62. else
  63. printf("No!\n");
  64. }
  65. }
  66.  
  67. return ;
  68. }

九度-题目1203:IP地址的更多相关文章

  1. 九度OJ 1203:IP地址 (字符串处理)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3038 解决:1496 题目描述: 输入一个ip地址串,判断是否合法. 输入: 输入的第一行包括一个整数n(1<=n<=500) ...

  2. 九度 题目1421:Abor

    转载声明本文地址 http://blog.csdn.net/yangnanhai93/article/details/40563285 题目链接:http://ac.jobdu.com/problem ...

  3. 九度 题目1437:To Fill or Not to Fill

    题目描述: With highways available, driving a car from Hangzhou to any other city is easy. But since the ...

  4. 九度 题目1044:Pre-Post

    转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40658571 题目链接:pid=1044">http://ac ...

  5. 九度-题目1026:又一版 A+B

    http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m ...

  6. 九度-题目1195:最长&最短文本

    http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出 ...

  7. 九度 题目1154:Jungle Roads

    题目描写叙述: The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid mon ...

  8. 九度 题目1454:Piggy-Bank 完全背包

    题目1454:Piggy-Bank 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1584 解决:742 题目描述: Before ACM can do anything, a budg ...

  9. 【九度OJ】题目1026:又一版 A+B 解题报告

    [九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...

随机推荐

  1. 201552-53 《Java程序设计》第三周问题汇总

    201552-53 <Java程序设计>第三周问题汇总 1. 4.2 基本类型打包器理解不是很好,希望老师讲解一下. 2.vim中怎么用"yyp"复制上一行代码 在按E ...

  2. 20155318 《Java程序设计》实验五 (网络编程与安全)实验报告

    20155318 <Java程序设计>实验五 (网络编程与安全)实验报告 实验内容 了解计算机网络基础 掌握Java Socket编程 理解混合密码系统 掌握Java 密码技术相关API的 ...

  3. 20145209 2016-2017-2 《Java程序设计》课程总结

    20145209 2016-2017-2 <Java程序设计>课程总结 每周作业链接汇总 预备作业01 http://www.cnblogs.com/liuyiyang/p/6194319 ...

  4. SaltStack入门篇(三)之数据系统Grains、Pillar

    1.什么是Grains? Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息.可以理解为Grains记录着每台Minion的一些常用属性,比如CPU ...

  5. 跨越适配&性能那道坎,企鹅电竞Android weex优化

    WeTest 导读 企鹅电竞从17年6月接入weex,到现在已经有一年半的时间,这段时间里面,针对遇到的问题,企鹅电竞终端主要做了下面的优化: image组件 预加载 预渲染 Image组件 weex ...

  6. 基于Spring的最简单的定时任务实现与配置(三)--番外篇 cron表达式的相关内容

    本来这篇文章是会跟本系列的前两篇文章一起发布的.但是,昨天在找资料总结的时候遇到了一点意外,就延后了一些. 本篇的内容主要参考了 这篇博文:http://www.cnblogs.com/junrong ...

  7. Python小白学习之函数装饰器

    装饰器 2018-10-25 13:49:37 装饰器从字面意思就是用来装饰的,在函数可以理解为:在函数中,我们不想影响原来的函数功能,又想给函数添加新的功能,这时候我们就用到了装饰器. 一般函数操作 ...

  8. selenium自动化之处理浏览器警告弹窗

    有的网站会弹出类似如下图的警告弹窗,你会发现这种弹窗在html源码中怎么也定位不到,接下来将介绍这种弹窗的处理方式. 其实这种弹窗是不属于html的元素的,他是属于浏览器自带的弹窗,所以用定位元素的方 ...

  9. jsp 修改页面感受

    什么事情只有做过才知道. 最近在负责官网的开发,有一些页面需要和前端商量着修改,但是看到jsp那繁杂的标签和各种css,js混到一起,实在觉得jsp已经是一种落后的技术了,在修改过程中频频出现各种格式 ...

  10. python-__getattr__ 和 __getattribute__

    python3完全使用了新式类,废弃了旧式类,getattribute作为新式类的一个特性有非常奇妙的作用.查看一些博客和文章后,发现想要彻底理解getattr和getattribute的区别,实际上 ...