求以下问题的完整代码

描述
合法的IP地址是这样的形式:

A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不会有前导零存在,如001这种情况。请编写程序判断IP地址的合法性。

输入
第1行是一个整数n,表示随后有n组数据。每组数据占一行,为一个待判断合法性的IP地址。

输出
对每组数据,如果是合法的IP地址,输出yes,否则输出no

样例
输入

2
202.115.32.24
a.b.c.d
输出

yes
no

运行结果:

img

代码:

#include <stdio.h>
#include <stdlib.h>
//将s中的字符串用.拆分
int splitstr(const char* s, char ip[][10], int* n)
{
    int i = 0, j = 0, k = 0;
    while (1)
    {
        if (s[i] == '\0')
        {
            ip[k][j] = '\0';
            k++;
            break;
        }
        if (s[i] >= '0' && s[i] <= '9')
            ip[k][j++] = s[i];
        else if (s[i] == '.')
        {
            ip[k][j] = '\0';
            j = 0;
            k++;
        }
        else
            return 0; //其他字符
        i++;
    }
    *n = k;
}

//字符串转数字
int str2int(const char* p)
{
    int i=0, v = 0;
    while (p[i] != '\0')
    {
        v = v * 10 + (p[i] - '0');
        i++;
    }
    return v;
}


//判断是否合法
int isValid(char ip[][10], int n)
{
    int i, v;
    if (n != 4)
        return 0;
    else
    {
        for (i = 0; i < n; i++)
        {
            v = str2int(ip[i]);
            if (v < 0 || v > 255)
                return 0;
        }
        return 1;
    }
}

int main()
{
    int n, i, nmb;
    char str[100],ip[10][10];
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%s", str);
        if (splitstr(str, ip, &nmb) && isValid(ip,nmb))
        {
            printf("yes\n");
        }
        else
            printf("no\n");
    }
    return 0;
}

参考:https://blog.csdn.net/qq_66345100/article/details/122745997

供参考:

#include <stdio.h>
int isVaildIp(const char* ip)
{
    int dots = 0;//字符 . 的个数
    int setions = 0;//ip每一部分总和(0-255)
    int strnum = 0; //字符串长度记录

    if (NULL == ip || *ip == '.')
        return  0;//格式错误

    while (*ip)/
    {
        if (*ip == '.')
        {
            dots++;     //字符 . 的个加一
            if (setions >= 0 && setions <= 255)//检查ip是否合法
                setions = 0;
            else
                return  0;
        }
        else if (*ip >= '0' && *ip <= '9')//判断是不是数字
            setions = setions * 10 + (*ip - '0');//求每一段总和
        else
            return  0; //该字符既不是数字也不是点
        ip++;
        if (++strnum > 15)//IP地址字符串非结束符字符数最多15个
            return  0;
    }
    //判断IP最后一段是否合法
    if (setions >= 0 && setions <= 255)
    {
        if (dots == 3)
            return  1;
    }
    return  0;
}

int main()
{
    int  n;
    char str[32];
    scanf("%d", &n);
    getchar();
    while(n--){
        gets(str);
        if(isVaildIp(str))
           printf("yes\n");
        else
           printf("no\n");
    }
  return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632