题目要求验证输入邮箱的合法性。
总时间限制: 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。