解题思路:
一个合格的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语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:757 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:624 |
WU-输出正反三角形 (C++代码)浏览:1018 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:547 |
1124题解浏览:592 |
川哥的吩咐 (C语言代码)浏览:611 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:764 |
简单的a+b (C语言代码)浏览:435 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:538 |
1250题解浏览:556 |