有没有什么高效地判断一个字符串是IP还是域名的方法? 有没有什么高效地判断一个字符串是IP还是域名的方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 foreach(char cha in yourstring) { if (cha<'0'||cha>'9' || cha='.') 是IP else }楼上就对 来蹭个分 搞反了! foreach(char cha in yourstring) { if (cha 》'0'||cha《'9' || cha='.') 是IP else } 这个函数应该可以工作bool IsaIPv4(const char *psz){ if(strlen(psz) > 15 || strlen(psz) < 7) return false; int iPoint = 0; const char *b = psz; while(*psz) { if(*psz == '.') { if(psz-b < 1) return false; if(psz-b > 1 && *b == '0') return false; if(atoi(b) > 255) return false; iPoint++; b = psz+1; } else if(!isdigit(*psz)) return false; psz++; } return (iPoint == 3);} 修订一下,一个小函数也要认真写才能不出错:)bool IsaIPv4(const char *psz){ if(strlen(psz) > 15 || strlen(psz) < 7) return false; int iPoint = 0; const char *b = psz; while(*psz) { if(*psz == '.') { if(psz-b < 1) return false; if(psz-b > 1 && *b == '0') return false; if(atoi(b) > 255) return false; iPoint++; b = psz+1; } else if(!isdigit(*psz)) return false; psz++; } if(iPoint != 3) return false; if(psz-b < 1) return false; if(psz-b > 1 && *b == '0') return false; if(atoi(b) > 255) return false; return true; 上面的答案真搞笑,除了一楼的.微软已经提供API去判断.if (inet_addr(Host) != INADDR_NONE) // 非域名还判断是不是字母什么的,中文域名都出来了. std::string str;//要判断的字符串std::string strSubStr = "0123456789,"; if (std::string::npos != str.find_first_not_of(strSubStr)) { // 域名 }else{ Ip} 看用法了写写函数并无坏处,也不见得可笑要知道inet_addr 认为 "0XBC.0355.0.0"也是一个合法的IPV4,实践中,可能不这样想 isalpha(szAddressName[0]) 如果是真 那么就是域名了我们都是这么判断的 这没什么搞笑的,你只是提供了一个方法,其他人提供的原理。你只知道使用,那你知道inet_addr()是如何做到的么 几种引用计数的关系 怎么通过树形列表改变CView类型 请问如何查询没有静态绑定数据集类的数据表的记录? 串口通信 转贴]大学二十一件事 你都经历过哪些~? 请问这段程序有什么问题 哪位知道使用HTML Help 1.3 SDK创建chm文件啊? 跪求达人提供4层神经网络BP算法 VC++串口调试 vc通过ado如何使视图更新 (C api)mysql.h中的有rollback,有commit,但是怎样定义事物处理?在线等待高手回复 200分 求解决realplayer的问题
{
if (cha<'0'||cha>'9' || cha='.')
是IP
else
}楼上就对 来蹭个分
{
if (cha 》'0'||cha《'9' || cha='.')
是IP
else
}
{
if(strlen(psz) > 15 || strlen(psz) < 7) return false;
int iPoint = 0;
const char *b = psz;
while(*psz)
{
if(*psz == '.')
{
if(psz-b < 1) return false;
if(psz-b > 1 && *b == '0') return false;
if(atoi(b) > 255) return false;
iPoint++;
b = psz+1;
}
else if(!isdigit(*psz)) return false;
psz++;
} return (iPoint == 3);
}
{
if(strlen(psz) > 15 || strlen(psz) < 7) return false;
int iPoint = 0;
const char *b = psz;
while(*psz)
{
if(*psz == '.')
{
if(psz-b < 1) return false;
if(psz-b > 1 && *b == '0') return false;
if(atoi(b) > 255) return false;
iPoint++;
b = psz+1;
}
else if(!isdigit(*psz)) return false;
psz++;
}
if(iPoint != 3) return false;
if(psz-b < 1) return false;
if(psz-b > 1 && *b == '0') return false;
if(atoi(b) > 255) return false; return true;
std::string strSubStr = "0123456789,";
if (std::string::npos != str.find_first_not_of(strSubStr))
{
// 域名
}
else
{
Ip
}
写写函数并无坏处,也不见得可笑
要知道inet_addr 认为 "0XBC.0355.0.0"也是一个合法的IPV4,实践中,可能不这样想
我们都是这么判断的
这没什么搞笑的,你只是提供了一个方法,其他人提供的原理。你只知道使用,那你知道inet_addr()是如何做到的么