原题链接:IP判断
解题思路:
这个题目我采用逆向思维,直接把字符串中的数字求出来,然后用.连接。看它和原来的串相不相等。
相等后,判断数字个数必须为4个,且数字不能越域。
注意事项:
参考代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <string>
using namespace std;
char str[110],len;
int a[110],cnt;
bool judge() {
string s="",ip="";
int num = 0,cnt = 0;
for(int i = 0; i < len; i++) {
ip += str[i];
if(str[i]>='0' && str[i]<='9') {
num = num*10 + str[i]-'0';
}
else {
a[cnt++] = num;
num = 0;
}
}
a[cnt] = num;
cnt = min(cnt,3);
for(int i = 0; i <= cnt; i++) {
if(a[i] == 0) {
s += '0';
}
else {
string temp = "";
while(a[i]) {
char ch = a[i]%10 + '0';
temp += ch;
a[i] = a[i]/10;
}
for(int i = temp.length()-1; i >= 0; i--) {
s += temp[i];
}
}
s += '.';
}
ip += '\0';
int sLen = s.length();
s[sLen-1] = '\0';
//cout<<s<<endl;
if(s == ip) {
num = 0;
for(int i = 0; i < (int)s.length(); i++) {
if(s[i]>='0' && s[i]<='9') {
num = num*10 + s[i]-'0';
}
else {
if(num>=0 && num<=255) {
num = 0;
}
else {
return false;
}
}
}
if(num >= 0 && num <= 255) {}
else return false;
}
else {
return false;
}
if(cnt < 3) return false;
return true;
}
int main() {
while(gets(str)) {
len = strlen(str);
bool flag = judge();
if(flag) {
printf("Y\n");
}
else {
printf("N\n");
}
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复