简单的检测字符串是否是ip的算法

一个ip地址,如222.111.144.111,那么怎么检测字符串是否是这样的形式呢。

笔试中做到这一题,因为时间不够最后没做出来,回来思考了一下,可以用堆栈的思想来解决本题,下面贴出代码

编程菜鸟,单纯记录自己的算法,还请各位大神多指教。


bool checkIP(string szIP)
{
	string stack = "\0";//定义一个堆栈
	int i = 0;
	int stackPoint = 0;//栈顶指针
	int numberOfPoint = 0;//读到的'.'的数量
	while (szIP[i] != '\0')
	{
		if ((szIP[i] > '9' || szIP[i] < '0') && szIP[i] != '.')//检测字符是否是数字或者'.'
			return false;
		stack = stack + szIP[i];//入栈
		if (stack[0] > '9' || stack[0] < '0')//栈底不能是字符'.'
			return false;
		if (stack[stackPoint] == '.')//检测到'.'入栈时,前面的数字出栈,并检测是否合法
		{
			stack[stackPoint] = '\0';
			numberOfPoint++;
			if (numberOfPoint>4)
				return false;
			if (stoi(stack)>255 || stoi(stack) <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当然,我可以为您提供一段检测IP地址是否合法的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int is_valid_ip(char *ip) { int num, dots = 0; char *ptr; if (ip == NULL) { return 0; } ptr = strtok(ip, "."); if (ptr == NULL) { return 0; } while (ptr) { if (!isdigit(*ptr)) { return 0; } num = atoi(ptr); if (num < 0 || num > 255) { return 0; } ptr = strtok(NULL, "."); if (ptr != NULL) { dots++; } } if (dots != 3) { return 0; } return 1; } int main() { char ip[16]; printf("请输入IP地址:"); scanf("%s", ip); if (is_valid_ip(ip)) { printf("IP地址合法\n"); } else { printf("IP地址不合法\n"); } return 0; } ``` 这段代码可以检测输入的IP地址是否合法,如果合法则输出“IP地址合法”,否则输出“IP地址不合法”。 ### 回答2: 下面是一个简单的C算法,用于检测IP地址的合法性: ```c #include <stdio.h> #include <string.h> #include <stdlib.h> int validateIP(char *ip) { int num, dotCount = 0; char *token; // 检查IP中的数字和点的数量是否符合要求 for (int i = 0; i < strlen(ip); i++) { if (ip[i] == '.') { dotCount++; } else if (ip[i] < '0' || ip[i] > '9') { return 0; // 包含非数字字符,返回不合法 } } if (dotCount != 3) { return 0; // 点的数量不正确,返回不合法 } // 使用strtok函数将IP地址分割成四个部分 token = strtok(ip, "."); while (token != NULL) { num = atoi(token); // 将字符串转换为整数 if (num < 0 || num > 255) { return 0; // 数字不在有效范围内,返回不合法 } token = strtok(NULL, "."); } return 1; // IP地址合法 } int main() { char ip[20]; printf("请输入IP地址:"); scanf("%s", ip); if (validateIP(ip)) { printf("IP地址合法\n"); } else { printf("IP地址不合法\n"); } return 0; } ``` 这段代码中,`validateIP`函数用于检测IP地址的合法性。它首先检查IP地址中的数字和点的数量是否符合要求,然后使用`strtok`函数将IP地址分割成四个部分,并将每个部分转换为整数。最后,它检查每个数字是否在有效范围内(0到255之间)。如果IP地址是合法的,函数返回1;否则返回0。 在`main`函数中,用户可以输入一个IP地址,并调用`validateIP`函数进行检测。根据检测结果,程序会输出相应的提示信息。 ### 回答3: 下面是一段大致功能实现的C语言代码,可以用于检测IP地址的合法性。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int isValidIP(char *ip) { int num, dotCount = 0; char *token; const char delimiters[] = "."; // 检查是否为空指针 if (ip == NULL) { return 0; } // 分割IP地址为四个部分 token = strtok(ip, delimiters); while (token != NULL) { num = atoi(token); // 检查每个部分是否在0-255之间 if (num < 0 || num > 255) { return 0; } dotCount++; token = strtok(NULL, delimiters); } // 检查是否有且仅有三个点分割 if (dotCount != 3) { return 0; } return 1; // IP地址合法 } int main() { char ip[16]; printf("请输入一个IP地址:"); scanf("%s", ip); if (isValidIP(ip)) { printf("输入的IP地址合法!\n"); } else { printf("输入的IP地址不合法!\n"); } return 0; } ``` 这段代码通过`isValidIP`函数检测IP地址的合法性,接受一个字符串作为参数,返回1表示合法,返回0表示不合法。在`main`函数中,通过用户输入一个IP地址,并调用`isValidIP`函数进行判断,输出相应的结果。 IP地址的合法性判断条件如下: 1. IP地址由四个部分组成,以点作为分隔符。 2. 每个部分都是一个数值,取值范围为0-255。 3. 且仅有三个点分割。 该代码只是一个简单的示例,可能还存在一些特殊情况没有处理,可以根据实际需求进行改进和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值