HNU程序设计-有效E-mail地址

一.前言

        补修的第一个学期终于过半,程序设计的题目也开始难度加大(还是我太菜),有时间对一些题做个简单记录。欢迎指出我的错误以及交流思路^-^。

二.问题描述

三.问题分析及思路

        根据题意选出符合有效的地址即可,放进了set去重。本来应该用有效个数=@前符合标准的个数*@后符合标准的字母个数来解决的。看到中间出现了多个@的样例,最后还是完全模拟了选有效地址的过程做的。

1.定义step记录地址检查到第几步,temp字符串记录有效字符

2.当前字符符合要求则temp+当前字符

3.字母开头则step=1,之后取任意字符(除了“.”)

4.遇到@后step=2,之后为字母和数字

5.遇到“.”后step=3,之后为字母就加上这个字母,并存入结果的set

四.代码

没有AC,样例2的两个地址其实是重复的,应该是样例错误。

#include<iostream>
#include<cstring>
#include<set>
using namespace std;
int count_validaddress(string a);
int main()
{
	string x;
	cin>>x;
	cout<<count_validaddress(x)<<endl;
	return 1;
}
int count_validaddress(string a)
{
	int step;
	string temp;
	set<string> validstr;
	//挑选有效地址
	for(int i=0;i<a.length();i++) //从第一个字符开始寻找
	{
		temp="";
		step=0;
		for(int j=i;j<a.length();j++)
		{
			if(step==0&&a[j]>='a'&&a[i]<='z')
			{
				temp+=a[j];							//选定字母开头
				step=1;			
			}
			else if(step==1&&a[j]!='.'&&a[j]!='@') temp+=a[j];	//@前不能出现'.'
			else if(step==1&&a[j]=='.') break;		//出现'.'说明以选定的字符开头开始,没有有效地址
			else if(step==1&&a[j]=='@')
			{
				temp+=a[j];
				step=2;
			}
			else if(step==2&&a[j]=='@')	break;		//对于单个有效地址,@之后不能再出现@了
			else if(step==2&&((a[j]>='0'&&a[j]<='9')||(a[j]>='a'&&a[j]<='z')))
			{
				temp+=a[j];
			}
			else if(step==2&&a[j]=='.') 			//出现'.',接下来是字母构成的字符串
			{
				temp+=a[j];
				step=3;
			}
			else if(step==3&&(a[j]=='.'||a[j]=='_'||a[j]=='@')) break;
			else if(step==3&&a[j]>='a'&&a[j]<='z') //符合条件的字符串为有效
			{
				temp+=a[j];
				validstr.insert(temp);
				//cout<<temp<<endl;
			}
			//cout<<temp<<" "<<step<<endl;
		}
	}
	return validstr.size();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值