题意:判断一个字符串是不是有效的邮件地址。

题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=274

——>>照着题目做。

注意:1、输入有空格。

2、测试的时候不要直接复制测试数据,手敲吧~(vjudge上的复制会多一个空格,sgu上的复制直接闪过去……)

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cctype> using namespace std; const int maxn = 100 + 10; bool issymbol(char c){
bool ok = 0;
if(isalnum(c)) ok = 1;
if(c == '-' || c == '_') ok = 1;
return ok;
} int main()
{
int N, i;
char s[maxn];
scanf("%d", &N);
getchar();
while(N--){
//scanf("%s", s);
cin.getline(s, maxn);
bool ok = 1;
int len = strlen(s), cnt = 0, loc = 0;
if(len < 6) ok = 0;
for(i = 0; i < len; i++) if(s[i] == '@'){
loc = i; //找@位
cnt++;
}
if(cnt != 1 || loc == 0 || loc >= len-4) ok = 0;
if(ok){
if(s[0] == '.' || s[loc-1] == '.') ok = 0; //判断@前的两端是否为.
}
if(ok){ //判断@前是否只由symbol和.组成
for(i = 0; i <= loc-1; i++){
if(!issymbol(s[i]) && s[i] != '.'){
ok = 0;
break;
}
}
if(ok){ //判断是否有连续的.出现
for(i = 0; i < loc-1; i++) if(s[i] == '.' && s[i+1] == '.'){
ok = 0;
break;
}
}
}
if(ok){ //判断最后是否为.ll或.lll
if(isalpha(s[len-1]) && isalpha(s[len-2]) && isalpha(s[len-3]) && s[len-4] == '.'){
if(s[loc+1] == '.' || s[len-5] == '.') ok = 0; //判断@后两端是否是.
if(ok){ //判断@后是否只由symbol和.组成
for(i = loc+1; i <= len-5; i++) if(!issymbol(s[i]) && s[i] != '.'){
ok = 0;
break;
}
for(i = loc+1; i < len-5; i++) if(s[i] == '.' && s[i+1] == '.'){
ok = 0; //判断是否有连续的.出现
break;
}
}
}
else if(isalpha(s[len-1]) && isalpha(s[len-2]) && s[len-3] == '.'){
if(s[loc+1] == '.' || s[len-4] == '.') ok = 0; //判断@后两端是否是.
if(ok){ //判断@后是否只由symbol和.组成
for(i = loc+1; i <= len-4; i++) if(!issymbol(s[i]) && s[i] != '.'){
ok = 0;
break;
}
for(i = loc+1; i < len-4; i++) if(s[i] == '.' && s[i+1] == '.'){
ok = 0; //判断是否有连续的.出现
break;
}
}
}
else ok = 0;
}
if(ok) printf("YES\n");
else printf("NO\n");
}
return 0;
}

sgu - 274 - Spam-filter的更多相关文章

  1. Codeforces Gym 100338B Spam Filter 字符串哈希+贝叶斯公式

    原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...

  2. codeforces Gym 100338F Spam Filter 垃圾邮件过滤器(模拟,实现)

    阅读题, 概要:给出垃圾邮件和非垃圾邮件的集合,然后按照题目给出的贝叶斯公式计算概率一封邮件是垃圾邮件的概率. 逐个单词判断,将公式化简一下就是在垃圾邮件中出现的次数和在总次数的比值,大于二分之一就算 ...

  3. Linux服务器---邮件服务spam

    安装spam spam(SpamAssassin)利用perl来进行文字分析,他会检测邮件的标题.内容.送信人,这样就可以过滤出垃圾邮件 1.安装spam.由于spam的依赖太多,用户一定要使用yum ...

  4. Python Standard Library

    Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...

  5. OSCP Learning Notes - Privilege Escalation

    Privilege Escalation Download the Basic-pentesting vitualmation from the following website: https:// ...

  6. 2016.09.14,英语,《Using English at Work》全书笔记

    半个月时间,听完了ESLPod出品的<Using English at Work>,笔记和自己听的时候的备注列在下面.准备把每个语音里的快速阅读部分截取出来,放在手机里反复听. 下一阶段把 ...

  7. python 各模块

    01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...

  8. python基础学习笔记5--对象

    对象(object) 1.对象(object): 面向对象程序设计重要术语. 对象的特性:多态性.封装性.继承性 >>def add(x,y): return x+y 对于很多类型的参数都 ...

  9. python学习笔记之六:更加抽象

    Python被称为面向对象的语言,创建自己的对象是python非常核心的概念.这里会介绍如何创建对象,以及多态,封装,方法,特性,超类以及继承的概念. 一. 对象的魔力 面向对象程序设计中的术语 对象 ...

随机推荐

  1. apache开源项目 -- tez

    为了更高效地运行存在依赖关系的作业(比如Pig和Hive产生的MapReduce作业),减少磁盘和网络IO,Hortonworks开发了DAG计 算框架Tez.Tez是从MapReduce计算框架演化 ...

  2. Struts2的OGNL标签详解

    一.Struts2可以将所有标签分成3类: UI标签:主要用于生成HTML元素的标签. 非UI标签:主要用于数据库访问,逻辑控制等标签. Ajax标签:用于Ajax支持的标签. 对于UI标签,则有可以 ...

  3. linux 标准 GPIO 操作

    Linux 提供了GPIO 操作的 API,具体初始化及注册函数在 driver/gpio/lib_gpio.c 中实现.   #include    int gpio_request(unsigne ...

  4. 用Apache Kafka构建流数据平台的建议

    在<流数据平台构建实战指南>第一部分中,Confluent联合创始人Jay Kreps介绍了如何构建一个公司范围的实时流数据中心.InfoQ前期对此进行过报道.本文是根据第二部分整理而成. ...

  5. Redis源码分析系列

    0.前言 Redis目前热门NoSQL内存数据库,代码量不是很大,本系列是本人阅读Redis源码时记录的笔记,由于时间仓促和水平有限,文中难免会有错误之处,欢迎读者指出,共同学习进步,本文使用的Red ...

  6. python学习资源

    12岁的少年教你用Python做小游戏: http://blog.jobbole.com/46308/ python视频教程大全集: http://www.douban.com/group/topic ...

  7. 怎么用PHP在HTML中生成PDF文件

    原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PH ...

  8. SpannableString 记录(转)

    引用 http://blog.csdn.net/rockcoding/article/details/7231756 TextView是用来显示文本的,有时需要给TextView中的个别字设置为超链接 ...

  9. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)

    跑酷游戏制作 游戏类型: 此游戏Demo,为跑酷类游戏. 框架简介: 游戏通常由程序代码和资源组成.如果说模型.贴图.声音之类的可以给游戏环境提供一个物理描述和设置,那么脚本和代码块会给游戏赋予生命, ...

  10. 文本分类之特征描述vsm和bow

    当我们尝试使用统计机器学习方法解决文本的有关问题时,第一个需要的解决的问题是,如果在计算机中表示出一个文本样本.一种经典而且被广泛运用的文本表示方法,即向量空间模型(VSM),俗称“词袋模型”. 我们 ...