UDP广播协议叫吃饭


私信TA

用户名:Mustenaka

访问量:134864

签 名:

个人博客www.mustenaka.cn

等  级
排  名 12
经  验 23729
参赛次数 8
文章发表 196
年  龄 3
在职情况 学生
学  校 Sky_box
专  业 NE

  自我简介:

欢迎光临我的博客www.mustenaka.cn,Python,C#,U3D,C/C++开发合作可以找我

解题思路:
        先将整体的输入看作一个字符串,然后每隔一个'.'(IP表示中的那个点)进行一次分隔,分割成一个新的字符串,利用atoi函数将这个字符串直接转换成整形数,再通过判断整形数字是否合格来决定这个IP是否是一个合格的IP(什么,你说如果输入字母怎么办?那就直接在分割的时候排除了吧。)、


     介绍两个函数:

    1.atoi函数,atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0  。特别注意,该函数要求被转换的字符串是按十进制数理解的。

    注意,扫描一个字符串,这个字符串需要以'\0'结尾,我们做分割的时候一定要记住在其末尾添加\0,否则会出错。

    

    2.memset函数,memset是计算机中C/C++语言初始化函数。将s所指向的某一块内存中的后n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为s。

    其使用为 char a[100]; memset(a,0,100)或者memset(a,0,sizeof(a));使用sizeof的好处是不需要自己手动计算他的空间了,memset常常是和sizeof混合在一起用的。

    上面这一句话意思是将a[100]全部初始化为0;和char a[100]={0}相当,由于可以在任何地方使用还是比较常见的。


    利用这两个函数的特性,可以方便我们进行分割并且判断,同时也方便我们减少空间使用。


参考代码:

#include<bits/stdc++.h>
using namespace std;
const int Max=300;
int main() {
	char str[Max],tt[Max];
	while(cin>>str) {
		bool flag=true;        //标记位
		for(int i=0,k=0; i<strlen(str); i++) {
			if((str[i]<'0'||str[i]>'9')&&str[i]!='.') {
				flag=false;
				break;
			} else if(str[i]!='.') {
				tt[k++]=str[i];
			} else if(str[i]=='.'||i==strlen(str)-1) {
				tt[k]='\0';
				int ak;
				ak=atoi(tt);
				if(ak<0||ak>255) {
					flag=false;
					break;
				}
				memset(tt,0,sizeof(tt));
				k=0;
			}
		}
		if(flag)
			cout<<'Y'<<endl;
		else
			cout<<'N'<<endl;
	}
	return 0;
}

另外,这一个题解还有一点点小问题待解决,你能够发现这个小问题么?

PS:直接复制这个题解并提交OJ系统的话是正确的。

 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

问题就是对于前导0的时候仍然会输出Y,我对这个进行了改动,详见我的解答,谢谢您提供的思路,特别简洁,很棒!
2019-01-08 10:06:14
  • «
  • 1
  • »