题目要求输出所给字符串中合格的邮箱地址,要考虑的判断条件比较多,算是比较复杂的模拟题吧。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char data[520];
int length;
bool isvalid( char c ) {
if ( c<='z'&&c>='a' )
return true;
else if ( c<='Z'&&c>='A' )
return false;
else if ( c<='9'&&c>='0' )
return true;
else if ( c=='-'||c=='_' )
return true;
else
return false;
}
int getbegin( int pos ) {
int ctr,i;
ctr=0;
for ( i=pos;i>=0;i-- ) {
if ( isvalid(data[i]) )
ctr++;
else if ( data[i]=='.' ) {
if ( i<=0 )
break;
else {
if ( isvalid(data[i-1]) )
ctr++;
else
break;
}
}
else
break;
}
return ctr;
}
int getend( int pos ) {
int ctr,i;
ctr=0;
for ( i=pos;i<length;i++ ) {
if ( isvalid(data[i]) )
ctr++;
else if ( data[i]=='.' ) {
if ( i>=length-1 )
break;
else {
if ( isvalid(data[i+1]) )
ctr++;
else
break;
}
}
else
break;
}
return ctr;
}
int main()
{
int i,j,begin,end;
char temp;
length=0;
while ( scanf( "%c",&temp )!=EOF ) {
data[length]=temp;
length++;
}
data[length]='\0';
// printf( "%d\n",length );
for ( i=0;i<length;i++ ) {
if ( data[i]=='@' ) {
begin=getbegin(i-1);
end=getend(i+1);
if ( begin&&end ) {
for ( j=i-begin;j<=i+end;j++ )
printf( "%c",data[j] );
printf( "\n" );
}
}
}
return 0;
}