解题思路:
1.先判断输入格式是否为x.x.x.x,若果不是直接判断非法

2.遍历输入的字符串,当遍历到 ' . '时,将前面已经遍历的字符串存入临时字符串,再判断此字符串是否合法,然后清空临时字符串,继续遍历。

注意事项:
为保证遍历正确,需要在输入的字符串后面加一个' . ';
参考代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
using namespace std;
//判断传进来的字符串是否合法 
bool isLetem(string s)
{
	for(int i=0; i<s.length(); ++i)
	{
		if(s.at(i)<'0' || s.at(i)>'9')//判断是否为数字 
			return false;
	}
	if(s.at(0)=='0' && s.length()>1) //判断是否为以0开始的数字 
		return false;
	int tem = atoi(s.c_str());
	if(tem>255)
		return false;
	return true;
}
bool isLegalityIP(string ip)
{
	string sip;
	string tem; //定义临时字符串 
	sip = ip;
	int i = 0;
	sip += '.';//为保证遍历正确,需要在输入的字符串后面加一个' . ' 
	while(i<sip.length())
	{
		if(sip.at(i)=='.')
		{
			if(!isLetem(tem))//调用isLetem(); 
				return false;
			else
			{
				tem.clear();//清空临时字符串
				i++;
				continue;
			}
		}
		tem += sip.at(i++);//将遍历的字符存入临时字符串
	}
	return true;
}
int main()
{
	string str;
	while(cin>>str)
	{
		if(str.find("End")!=string::npos)//输入End of file结束 
			break;
		if(count(str.begin(),str.end(),'.')!=3 || str.find("..")!=string::npos)//判断格输入式是否正确 
			cout<<'N'<<endl;
	    else if(isLegalityIP(str))
			cout<<'Y'<<endl;
		else
			cout<<'N'<<endl;
	}
	return 0;
}


点赞(3)
 

0.0分

17 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 4 条评论

xiaocaiji 4年前 回复TA
我以为我写的够麻烦的了,没想到。。。你的比我写的还麻烦 。。。
靠近一点点 4年前 回复TA
哇操,厉害呀
一条咸鱼 4年前 回复TA
@zesongWang count()这个是判断里面有没有3个点,find()这个是查在str里面有没有“..”的子串(即检查两点之间有没有内容)
zesongWang 4年前 回复TA
if(count(str.begin(),str.end(),'.')!=3 || str.find("..")!=string::npos)//判断格输入式是否正确 
            请问这一句是什么意思啊,谢谢你