解题思路:
一个合格的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 人评分
printf基础练习2 (C语言代码)浏览:605 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:553 |
哥德巴赫曾猜测 (C语言代码)浏览:1148 |
C语言训练-阶乘和数* (C语言代码)-------- 呆板写法浏览:1396 |
C语言训练-尼科彻斯定理 (C语言代码)浏览:509 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:1110 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:570 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:1482 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:716 |
完数 (C语言代码)浏览:757 |