当前位置: 首页 > backend >正文

E-mail地址

【问题描述】

        e 妹儿公司的一个主要业务是提供电子邮件服务,每天都有数以万计的用户在使用该平台收发电子邮件e-mail。然而不幸的是,最近公司的邮件服务器遭受到了网络攻击,几乎所有的邮件内容都受到了破坏,每个邮件都只留下了一个长长的字符串。恢复所有邮件是不可能完成的任务,但似乎从这串留下的字符串中还可以解析出一些可能的e-mail地址,这样公司可以通过向这些解析出的e-mail地址发送邮件以减少用户的损失。

        一个有效的e-mail地址的形式符合以下原则:

        1、邮件开始部分必须是字母、数字和‘_’组成的串,但必须以字母开头

        2、接着必须为字符‘@’

        3、接着是非空的字母或数字序列

        4、接着必须为‘.’

        5、地址必须以非空的字母串结束,不能含有数字,'_',和'.'

       你很幸运地承担了这项工作,但请注意子串的区分,子串是指一个字符串中某些连续的字符组成的串。对于两个子串,其中一个组成的字符编号为l1、l1+1、l1+2、...、r1,另外一个组成的字符编号为l2、l2+1、l2+2、...、r2,如果l1≠l2或r1≠r2,则认为这是两个不同的子串。

【输入形式】

       输入仅有一行,为一个字符序列s1s2...sn( 1≤ n ≤ 106),为给定的字符串。输入保证这个字符串中只包含小写字母、数字以及字符 '.'、'_'、'@'。
【输出形式】

       输出为一个数,表示可以解析出的有效e-mail地址的数量(允许重复)。
【样例输入1】

gerald.agapov1991@gmail.com

【样例输出1】

18

【样例输入2】

x@x.x@x.x_e_@r1.com

【样例输出2】

8

【样例2解析】

样例2可以解析出如下邮件地址
x@x.x
x@x.x
x_e_@r1.com
x_e_@r1.co
x_e_@r1.c
e_@r1.com
e_@r1.co
e_@r1.c

【样例输入3】

a___@1.r

【样例输出3】

1

【样例输入4】

.asd123__..@

【样例输出4】

0

【样例说明】

        在第一个样例中,单词agapov每个字母开始的串(至'@'之前)都是合法的e-mail开始部分,共有6种,'@'之后'.'之前的字符串符合标准,'.'之后的单词com每个字母开始的串都是合法的结束部分,共有3种,因此,由这个字符串可以解析出6×3=18种地址。

思路

在样例说明部分给我们提供了一个很好的计算方法,即分别计算出'@'之前和'.'之后的合法字符数然后相乘。当然,必须要保证'@'和'.'之间的字符均符合要求,否则它不应被计入最终答案里面。若字符串由多部分'@'和'.'组成,则最终答案应是每部分统计结果之和。

代码

#include<iostream>
using namespace std;
int main(){string s;cin>>s;int sum=0;for(unsigned int i=0;i<s.size();i++){if(s[i]=='@'){for(unsigned int j=i+1;j<s.size();j++){if((s[j]=='.'&&j==i+1) || s[j]=='_' || s[j]=='@') break;if(s[j]=='.'){int cl=0,cr=0;for(int k=i-1;k>=0;k--){if(s[k]>='a'&&s[k]<='z') cl++;else if(s[k]=='.' || s[k]=='@') break;}for(unsigned int x=j+1;x<s.size();++x){if(s[x]>='a'&&s[x]<='z') cr++;else break;}	sum+=cl*cr;break;}}}}cout<<sum;	
}

最喜欢这种二十多行代码就能搞定的题了(点名批评某练习的第13题,待会儿再写那道题的解析吧)

http://www.xdnf.cn/news/11732.html

相关文章:

  • 几个比较好的在线生成印章网址[推荐]
  • mx250显卡天梯图_三月台式电脑显卡性能排名 2019年3月最新版显卡天梯图
  • 宏基4752g linux驱动下载,宏碁笔记本及应用程序驱动下载_硬件驱动下载
  • Oracle数据库学习(一):Oracle 11g数据库下载及安装
  • 真实的网络赚钱经历:另类推广引流操作CPA!
  • 80x86 汇编指令大全
  • 使用UNetBootin制作Ubuntu 10.04 LTS安装引导U盘
  • 微信支付(小程序)使用通联扣款通道
  • Windows系统丢失olepro32.dll文件导致程序异常的问题
  • Android开发无线调试工具adbwireless的使用简介(附AirADB)
  • unity网络实战开发(丛林战争)-正式开发阶段(016-数据库设计以及登录处理)
  • 终于解决了session问题,总结!
  • echarts如何在json地图上设置多种颜色的点位和自定义背景弹出框
  • 聊天记录2.0.db
  • 125款七夕情人节程序员专属表白网站【全网最全】HTML+CSS+JS
  • 推荐一款强大的视频播放器:恒星播放器
  • 财智V6.0(完美破解序列号特别版)
  • 中秋祝福代码,中秋快乐代码,采用H5制作的中秋动画祝福
  • 卡巴斯基病毒库离线更新教程(转)
  • 龙之崛起修改器V1.0版
  • 国产硬件防火墙横向对比
  • SQL Server 2005 dev 开发板 版本说明
  • 自己动手做博客之日志管理-5.3 管理日志列表
  • 【Vue】 第十六部分 插槽(默认插槽、具名插槽、作用域插槽)
  • GBA.js 在浏览器中的Game Boy Advance模拟器搭建指南
  • Data,computed,watch的作用?
  • 封面设计软件有什么?不容错过的五款封面设计软件
  • Android笔记之 TTS中文发音
  • 二本学渣考研失败,docker制作镜像教程
  • 仪表放大器放大倍数分析-运算放大器