只要把条件确定了就不难了
不要看到那么多英文就害怕
判断条件:
1. ‘.’不能作为第一个和最后一个字符
2. 除了‘@’与‘.’外,其他字符必须合法,即只能包括: a~z;A~Z;0~9;下划线、连字符
3. 然后就很简单了
给两个position变量,确定邮箱的起点与终点再进行输出就完成了。
#include <iostream>
#include <string>
using namespace std;
bool ilegal(char a){
if (a>='a' && a<='z'){
return true;
}
if (a>='A' && a<='Z'){
return true;
}
if (a>='0' && a<='9'){
return true;
}
if (a=='-' || a=='_'){
return true;
}
return false;
}
int main(){
string garbge;
while(cin>>garbge){
string target="";
for (int i = 1; i < garbge.length()-1; ++i){
if (garbge[i] != '@'){
continue;
}
if (garbge[i+1]=='.' || garbge[i-1]=='.'){
continue;
}
//the former part
int prePosition = i-1;
while(prePosition>=0){
if (ilegal(garbge[prePosition])){
prePosition--;
} else if (garbge[prePosition]=='.' && ilegal(garbge[prePosition-1])){
prePosition--;
} else{
break;
}
}
prePosition++;
//for later part
int backposition = i+1;
while(backposition<=garbge.length()-1){
if (ilegal(garbge[backposition])){
backposition++;
} else if (garbge[backposition]=='.' && ilegal(garbge[backposition+1])){
backposition++;
} else{
break;
}
}
backposition--;
int flag=false;
for (int j = prePosition; j<backposition; ++j){
cout<<garbge[j];
flag = true;
}
if(flag){
cout<<garbge[backposition]<<endl;
}
}
}
}