文章

1

粉丝

0

获赞

26

访问

406

头像
IP地址 题解:不用复杂判断,不用类型转换
P1023 贵州大学机试题
发布于2026年3月2日 14:27
阅读数 406

#include <iostream>
#include <algorithm>
using namespace std;
char t[20]="0123456789ABCDEF";//用于映射16进制
void func(int x) {
	int a=x/16, b=x%16;
	cout << t[a];
	cout << t[b];
}
bool ip(int a, int b, int c, int d) {//检查ip是否是0-255
	if (a > 255 || a < 0) return 0;
	if (b > 255 || b < 0) return 0;
	if (c > 255 || c < 0) return 0;
	if (d > 255 || d < 0) return 0;
	return 1;
}
int main()
{
	int a, b, c, d;
	char n[100];
	scanf("%s",n);//第一次读入看是否是x.x.x.x
	int count=0;
	for(int i=0;n[i]!='\0';i++){
		if(n[i]=='.')count++;
	}
	if(count!=3){
		printf("Error");
		return 0;//不是x.x.x.x就直接结束
	}
	if (sscanf(n,"%d.%d.%d.%d", &a, &b, &c, &d)&&ip(a, b, c, d)) {//如果是就用sscanf格式化读入避免类型转换
		cout << "0x";
		func(a);
		func(b);
		func(c);
		func(d);
	}
	else {
		cout << "Error";
	}
	return 0;
}

用scanf读入字符串看是否有三个'.'

然后用sscanf格式化读入避免复杂的转换类型

ip()用于检查是否符合0-255

func()用于...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发