Cálculo de IP HDU-2206

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;
}

 

Publicado 339 artículos originales · elogiado 351 · 170,000 visitas

Supongo que te gusta

Origin blog.csdn.net/Aibiabcheng/article/details/105353401
Recomendado
Clasificación