# include & ltstring.h & gt
int?格式檢查(char?*);
夏爾?*?SplitByAt(char?*?,int);
夏爾?*?CharsCheck(char?*);
#定義?n?1024
int?主()
{
夏爾?str[N],* field
memset(str,0x00,N);
scanf("%s ",str);
field=SplitByAt(str,N);
if(field==NULL)
{
printf(" NO \ n ");
回歸?-1;
}
不然呢?if(format check(str )& amp;& amp格式檢查(字段))
{
printf(" YES \ n ");
回歸?0;
}
其他
{
printf(" NO \ n ");
回歸?-1;
}
}
/**
*檢查域名/電子郵件格式。
*/
int?格式檢查(char?*str)
{
夏爾?* p;
for(;;)
{
p = chars check(str);
if(p==str)
{
回歸?0;
}
不然呢?if(*p=='\0 ')
{
回歸?1;
}
不然呢?if(*p!='.')
{
回歸?0;
}
p++;
str = p;
}
}?
/**
*檢查@是否可以分成兩段,返回域名的第壹個地址,如果不需要則返回NULL。
*參數:str、源字符串、長度、長度限制(反交叉)
*該函數將用' \0 '替換源字符串中的第壹個' @ ',郵箱和域名已被拆分。
*/
夏爾?*SplitByAt(char?*str,int?長度)
{
夏爾?*p=strchr(str,' @ ');
如果(p!= NULL & amp& amp(p-str)& lt;長度)
{
* p = 0;
p++;
回歸?p;
}
回歸?NULL
}
/**
*檢查str是否是連續的' a'-'z ',' A'-'Z ',' 0'-'9 '字符。
*返回值:第壹個不滿意字符的位置。
*例如:str="abc ",返回str+3;?Str="a#bc ",返回str+1;
*/
夏爾?*?CharsCheck(char?*str)
{
while((* str & gt;= ' a ' & amp& amp* str & lt='z')||
(* str & gt= ' A ' & amp& amp* str & lt='Z')||
(* str & gt= ' 0 ' & amp& amp* str & lt='9')||
*str=='_ ')
{
str++;
}
回歸?str
}要求沒有提到' _ '符號的特殊規則,所以郵件喜歡“_ _”。_ _ @ _”也可以驗證。