题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
---|---|---|---|---|---|
E-mail Addresses | ★★☆☆☆ | 答案正确 | 100 | 2015-02-24 12:42:17 | 数据类型(0) |
给一个字符串,找出其子串中是E-mail的。
{字母序列1+字母、数字、'_'}+{‘@’+字母数字+‘.’}+{字母序列2}
【default】 --[有字母开头]--> 【a1】 --[碰到'@']--> 【a2】 --[碰到'.']-->【a3】 ↑ ┃ ┃ ┃ | [非字母、数字、'_'] [非字母数字] [非字母] └--------------------------┻---- ---------------┻----------------- ┛
412E.cpp代码已折叠
展开折叠内容
|
---|
#include<cstdio> #include<iostream> #include<string> using namespace std; #define dsi(n) int n;scanf("%d",&n) #define si(n) scanf("%d",&n) #define f(i,n) for(int i=1;i<=n;++i) #define fi(n) f(i,n) #define f0(i,n) for(int i=0;i!=n;++i) #define fd(i,n) for(int i=n;i>=1;--i) #define ci const int& #define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i) #define c(x) const x& class st { int x,y; friend bool operator <(const st&a,const st&b){return a.x<b.x;} }; string s; unsigned long long a1=0,a2=0,a3=0,p1=0,p2=0,ans=0;//fixed数据类型// int main() { //[{字母+字母数字_}+{@+字母数字+.}+{字母}// //a1->a2->a3// cin>>s; foreach(i,s) { //a3continue; if(a3) { if(isalpha(*i)) { ++a3; if(a3>=2) { ans+=p1; //cout<<"[]"; } } else a3=0; } //a3in// if(a2>=2/*fixed:>=2而非>0*/&&*i=='.') a3=1; //a2continue// if(!isalnum(*i)&&a2) a2=0; if(isalnum(*i)&&a2) ++a2; //a2in// if(*i=='@'&&a1) ++a2,p1=p2; //a1continue// if(isalpha(*i)&&a1) ++p2; if((isalnum(*i)||*i=='_')&&a1) ++a1; else a1=0,p2=0; //a1in// if(isalpha(*i)&&a1==0) ++a1,++p2; //cout<<*i<<" "<<a1<<" "<<a2<<" "<<a3<<" "<<p1<<endl; } cout<<ans; return 0; } |