我在业余时间尝试学习c ++并需要一些指导。我试图要求用户输入包含电子邮件地址列表的文件。从该列表中,我想检查每个电子邮件地址,以表明每个地址恰好包含1个句点。我想用一个包含指针的bool来解决这个问题。我在如何启动该功能方面遇到了麻烦。我成功输入了文件,但在下一步中我输了。任何帮助表示赞赏。谢谢。
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
bool oneAt(const char *email);
bool nonblankAt(const char *email);
bool oneDot(const char *email);
bool nonblankDot(const char *email);
int main(){
char filename[25];
ifstream fin;
cout << "Enter the input file\n";
cin >> filename;
fin.open(filename);
if(fin.fail()){
cerr << "Input file opening error.\n";
}
else{
cout << "success\n";
}
const int size = 50;
char line[size];
fin.close();
system("Pause");
return 0;
}
bool oneAt(const char *email)
答案 0 :(得分:0)
如果你想学习C ++,更喜欢std::string
而不是字符数组和指针:
bool oneAt(const std::string& email)
{
return email.find('@') != email.end();
}
int main()
{
std::string filename;
cout << "Enter the input file\n";
if (std::cin >> filename)
{
if (std::ifstream fin(filename))
{
std::string line;
while (getline(std::cin, line))
{
if (oneAt(line))
std::cout << "found one @ in '" << line << "'\n";
// similar for checking for periods etc..
}
}
else
std::cerr << "Input file opening error.\n";
}
else
cerr << "Error reading filename\n";
}
也就是说,使用正则表达式或自定义解析器可以更好地完成任何模糊的(可用于实际)验证电子邮件地址的工作,并且它非常复杂。 Google&#34;正则表达式,用于电子邮件验证&#34;或类似的,你会发现在不同的复杂程度上进行激烈的讨论和许多变化。我怀疑有谁知道哪个是最好的&#34;就最准确的整体覆盖而言。