码迷,mamicode.com
首页 > 其他好文 > 详细

SGU 274 Spam-filter

时间:2015-05-07 21:53:48      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

题意:

      按照给定的条件判断给出的邮箱地址是否合法。

 

 


Solution:

     模拟。需要注意输入中可能包含空格。

     空串不能作为symbol,因此prefix也不能包含连续和出现在首尾的‘.‘

 

技术分享
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n;
string s;
bool symbol (char c) {
    return c == _ || (c >= 0 && c <= 9) || (c >= a && c <= z) || (c >= A && c <= Z) || c == -;
}
bool prefix (string s) {
    if (s.size() == 0) return 0;
    for (int i = 0, cnt = 0; i < s.size(); ++i) {
        if (s[i] == .) {
            if ( i == 0 || i == s.size() - 1) return 0  ;
            else if (s[i + 1] == . || s[i - 1] == .) return 0;
        }
        else if (!symbol (s[i]) ) return 0;
    }
    return 1;
}
int main() {
    cin >> n;
    getchar();
    while (n--) {
        getline (cin, s);
        bool ok = 1;
        int p = s.find (@);
        if (p >= 0) {
            string t (s, 0, p);
            s.assign (s, p + 1, s.size() );
            if (!prefix (t) ) ok = 0;
            p = s.rfind (.);
            if (p >= 0 && ok) {
                string t (s, 0, p);
                s.assign (s, p + 1, s.size() );
                if (!prefix (t) ) ok = 0;
                if (s.size() < 2 || s.size() > 3) ok = 0;
                for (int i = 0; i < s.size() && ok; ++i) {
                    if (! ( (s[i] >= a && s[i] <= z) || (s[i] >= A && s[i] <= Z) ) ) ok = 0;
                }
            }
            else ok = 0;
        }
        else ok = 0;
        if (ok) puts ("YES");
        else puts ("NO");
    }
}
View Code

 

SGU 274 Spam-filter

标签:

原文地址:http://www.cnblogs.com/keam37/p/4485954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!