C语言检测字符串是IP还是域名
时间: 2024-12-01 07:29:44 浏览: 19
在C语言中,检测一个字符串是IP地址还是域名通常涉及到一些正则表达式和网络协议的理解。以下是一个简单的示例,展示了如何使用函数来初步判断:
```c
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
#include <regex.h>
bool is_valid_ip(char *str) {
static const regex ip_regex = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
return (reg_match_all(ip_regex, str, NULL) > 0);
}
bool is_valid_domain(char *str) {
// 这里只是一个简化的判断,实际验证域名需要连接到DNS服务器查询
bool has_dot = false;
for (int i = 0; str[i]; i++) {
if (str[i] == '.') {
has_dot = true;
if (i+1 >= strlen(str) || !isalpha(str[i+1])) {
return false;
}
} else if (!isalnum(str[i]) && str[i] != '-') {
return false;
}
}
return has_dot && str[strlen(str)-1] != '.';
}
bool is_ip_or_domain(char *str) {
if (is_valid_ip(str)) {
return true;
} else if (is_valid_domain(str)) {
return true;
} else {
return false;
}
}
int main() {
char input[] = "192.168.0.1";
if (is_ip_or_domain(input)) {
printf("输入的是IP地址或域名\n");
} else {
printf("输入的不是IP地址也不是域名\n");
}
return 0;
}
阅读全文