检查给定字符串是否为有效 IP 地址的建议/帮助/更好的解决方案

jos*_*501 0 c function c-strings

老实说,我认为我编写的代码是垃圾,而且我不认为这是解决问题的最佳方法。我需要一些建议或改进来解决这个问题。我对编码还是新手。如果您能提供一些有关如何使用字符串和各种字符串函数的提示,我将不胜感激。

该字符串成为 IP 地址的条件:-

连接到互联网的设备的标识号。以点分四组表示法书写的 IPv4 地址由四个用句点分隔的 8 位整数组成。

换句话说,它是一个由四个数字组成的字符串,每个数字都在 0 到 255 之间(含 0 和 255),并带有“.”。每个数字之间的字符。所有数字都应不带前导零。

例子:

  1. 192.168.0.1 是有效的 IPv4 地址
  2. 255.255.255.255 是有效的 IPv4 地址
  3. 280.100.92.101 不是有效的 IPv4 地址,因为 280 太大,无法成为 8 位整数(最大的 8 位整数为 255)
  4. 255.100.81.160.172 不是有效的 IPv4 地址,因为它包含 5 个整数,而不是 4 个
  5. 1..0.1 不是有效的 IPv4 地址,因为格式不正确
  6. 17.233.00.131 和 17.233.01.131 不是有效的 IPv4 地址,因为它们包含前导零

这是我的代码(我知道它是垃圾并且没有任何意义):-

bool isIPv4Address(char * inputString) {
    int count = 0, period = 0;
    int k = 0, i = 0;
    int digit = 0;
    
     
    while(inputString[i] != '\0')
    { 
        count = 0;
        digit = 0;
        i = k;
        
        if(inputString[i] == '0' || inputString[i] == '.')
        {
            if(inputString[i+1] >47 && inputString[i+1] < 58)
            {
                return false;
            }
        }
        
        while(inputString[i] != '.' && inputString[i] != '\0')
        {
            if(inputString[i] < 48 || inputString[i] > 57)
            {
                return false;
            } 
            count += (int)inputString[i];
            i++;
            digit++;
        }
        
        if(digit == 3)
        {
            if(inputString[i - 3] > '2')
            {
                return false;
            }
        }
        
        if(inputString[i] == '.')
        {
            period++;
        }
        
        k = i+1;
      
        if(count < 48 || count > 156)
        {
            return false;
        }
        
        if(inputString[i] == '\0')
        {
            break;
        }
    }
    
    if(period == 3)
    {
        return true;
    }else
    {
        return false;
    }  
}
Run Code Online (Sandbox Code Playgroud)

And*_*nle 5

在 POSIX 系统上,使用以下inet_addr()函数

姓名

inet_addr, inet_ntoa- IPv4 地址操作

概要

#include <arpa/inet.h>

in_addr_t inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);
Run Code Online (Sandbox Code Playgroud)

描述

inet_addr()函数应将 指向的字符串cp(采用标准 IPv4 点分十进制表示法)转换为适合用作 Internet 地址的整数值。

除非您编写代码用于练习,否则无需重新发明现有的标准解决方案。

...

返回值

成功完成后,inet_addr()应返回互联网地址。否则,它将返回( in_addr_t)(-1)

...