解题思路:
一个合格的IP地址:192.168.2.1。
以“.”为分割处,将其分割为4部分,每一部分分别判断。
1.将整体放在字符数组(ip[30])里,将分开的4部分放在字符数组(a[4] b[4[] c[4] d[4])里。
2.对分开的四部分分别判断:
(1)判断正负
(2)判断长度
(3)判断有其他字符的出现
注意事项:
将字符数组转换为数字
参考代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
char a[4],b[4],c[4],d[4],ip[30];
int alen = 0, blen = 0, clen = 0, dlen = 0;
void cut(){
int len = strlen(ip);
int i = 0;
while(ip[i] != '.'){
a[alen++] = ip[i];
i++;
//cout << "a:" << i << " ";
}
i++;//跳过 "."
while(ip[i] != '.'){
b[blen++] = ip[i];
i++;
//cout << "b:" << i << " ";
}
i++;//跳过 "."
while(ip[i] != '.'){
c[clen++] = ip[i];
i++;
}
i++;//跳过 "."
while(ip[i] < len){
d[dlen++] = ip[i];
i++;
}
/*for(int f = 0; f < alen; f++)
cout << a[f];
cout << endl;
for(int k = 0; k < blen; k++)
cout << b[k];*/
}
void judge(char *ip){
int leng = strlen(ip);
int ans = 0;
if(leng > 15){
cout << "N" << endl;
return;
}else{
cut();//分为 4段 a b c d
if(a[0] == '-' || b[0] == '-' || c[0] == '-' || d[0] == '-'){
cout << "N" << endl;
return;
}else{
int aans = 0,bans = 0,cans = 0,dans = 0;
//a段进行判断是否小于255
for(int j = 0; j < alen; j++){
if(a[j] >= '0' && a[j] <= '9'){
aans += aans * 10 + (a[j] - '0');
}
else{
cout << "N" << endl;
return;
}
}
if(aans > 255){
cout << "N" << endl;
return;
}else{
cout << "Y" << endl;
return;
}
//b段进行判断是否小于255
for(int j = 0; j < blen; j++){
if(b[j] >= '0' && b[j] <= '9'){
bans += bans * 10 + (b[j] - '0');
}
else{
cout << "N" << endl;
return;
}
}
if(bans > 255){
cout << "N" << endl;
return;
}else{
cout << "Y" << endl;
return;
}
//c段进行判断是否小于255
for(int j = 0; j < clen; j++){
/*
101
0+1=1
1 * 10 + 0 = 10
10 * 10 + 1 = 101
*/
if(c[j] >= '0' && c[j] <= '9'){
cans += cans * 10 + (c[j] - '0');
}
else{
cout << "N" << endl;
return;
}
}
if(cans > 255){
cout << "N" << endl;
return;
}else{
cout << "Y" << endl;
return;
}
//d段进行判断是否小于255
for(int j = 0; j < dlen; j++){
if(d[j] >= '0' && d[j] <= '9'){
dans += dans * 10 + (d[j] - '0');
}
else{
cout << "N" << endl;
return;
}
}
if(dans > 255){
cout << "N" << endl;
return;
}else{
cout << "Y" << endl;
return;
}
}
}
}
int main(){
while(scanf("%s",ip) != EOF){
judge(ip);
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复