Skip to content

Latest commit

 

History

History
98 lines (78 loc) · 2.2 KB

4015.md

File metadata and controls

98 lines (78 loc) · 2.2 KB

邮箱验证 4015: 邮箱验证

题目要求验证输入邮箱的合法性。

题目来源

4015: 邮箱验证

总时间限制: 1000ms 内存限制: 65536kB

描述

POJ 注册的时候需要用户输入邮箱,验证邮箱的规则包括:

1)有且仅有一个'@'符号

2)'@'和'.'不能出现在字符串的首和尾

3)'@'之后至少要有一个'.',并且'@'不能和'.'直接相连

满足以上3条的字符串为合法邮箱,否则不合法,

编写程序验证输入是否合法

输入

输入包含若干行,每一行为一个代验证的邮箱地址,长度小于100

输出

每一行输入对应一行输出

如果验证合法,输出 YES

如果验证非法:输出 NO

样例输入

.a@b.com
pku@edu.cn
cs101@gmail.com
cs101@gmail

样例输出

NO
YES
YES
NO

这是一个字符串判别问题,首先要计数@的位置和个数,对于多余一个@的情况就不合法。 然后要判断@和.的位置,不能相邻也不能位于首位。 最后要有一个.在@之后,判断以上条件是否均成立即可。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
	string str;
	while (cin >> str) {
		vector<int> dot;
		int pAT = -1, nAT = 0, i, j;
		for (i = 0; i < str.length(); ++i) {
			if (str[i] == '@') {
				nAT++;
				pAT = i;
			}
			else if (str[i] == '.') {
				dot.push_back(i);
			}
		}
		bool is = false;
		if (nAT == 1 && str.front() != '@' 
			&& str.front() != '.'
			&& str.back() != '@' 
			&& str.back() != '.') 
		{
			for (j = 0; j < dot.size(); ++j) {
				if (dot[j] - pAT == 1 || dot[j] - pAT == -1) {
					is = false;
					break;
				}
				if (dot[j] - pAT > 1) {
					is = true;
				}
			}
		}
		cout << (is ? "YES" : "NO") << endl;
	}
	return 0;
}

4015.cpp 代码长度:702B 内存:128kB 时间:1ms 通过率:86% 最小内存:128kB 最短时间:0ms

字符串可以通过string类型来处理,之后就是对字符串的一系列操作,对于数量不明确的情况可以使用vector数组来处理。

有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。