Descripción
En el curso en línea, aprendí mucho sobre IP. El nombre completo de IP es el Protocolo de Internet. A veces usamos IP para referirnos a nuestra dirección de red IP. Ahora, IPV4 está representado por un entero sin signo de 32 bits. Generalmente se muestra en modo punteado. El punto divide la dirección IP en 4 partes. Cada parte es de 8 bits, expresada como un entero sin signo (por lo que no es necesario que aparezca con un signo positivo), como 192.168.100.16, es una dirección IP con la que estamos muy familiarizados, y no hay espacios en una cadena de dirección IP (porque debe expresarse como un 32 números).
Pero descuidadamente, a menudo escribo la dirección IP incorrecta, ahora necesitas usar el programa para juzgar.
Entrada
La entrada tiene múltiples casos, cada caso tiene una línea, no más de 100 caracteres.
Salida
Para cada caso, juzgue si la IP de entrada es correcta, si la entrada correcta es SÍ, de lo contrario NO.
Entrada de muestra
192.168.100.16
Salida de muestra
YES
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char s[105];
int main()
{
bool flag;
int len;
int points;
int a[4];
while (gets(s)){
flag = true;
len = strlen(s);
if (len > 15 || len < 7 || s[0] == '.' || s[len-1] == '.'){
flag = false;
}else {
for (int i = 0; i < len-1; i++)
if (a[i] == '.' && a[i+1] == '.')
flag = false;
if (flag){
points = 0;
for (int i = 0; i < len; i++){
if (s[i] == '.')
points++;
else if (!isdigit(s[i])){
flag = false;
break;
}
}
if (points != 3)
flag = false;
else {
int j = 0;
memset(a, 0, sizeof(a));
for (int i = 0; i < len; i++){
if (s[i] != '.')
a[j] = a[j]*10 + (s[i]-'0');
else
j++;
}
for (int i = 0; i < 4; i++){
//printf("%d, ", a[i]);
if (a[i] < 0 || a[i] > 255)
flag = false;
}
}
}
}
if (flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
Otra solución, reproducida en: https://blog.csdn.net/chaokudeztt/article/details/105307697
#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
int main() {
char s[100],temp[100];
int a,b,c,d;
char p;
while(cin.getline(s,100)) {
int flag=0;
int len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]==' '){
flag=1;
break;
}
}
if(flag==0&&sscanf(s,"%d.%d.%d.%d%c",&a,&b,&c,&d,&p)==4&&a>=0&&a<=255&&b>=0&&b<=255&&c>=0&&c<=255&&d>=0&&d<=255) {
sprintf(temp,"%d.%d.%d.%d",a,b,c,d);
if(strcmp(temp,s)==0) {
cout<<"YES"<<endl;
} else {
cout<<"NO"<<endl;
}
} else {
cout<<"NO"<<endl;
}
}
return 0;
}