验证电子邮件地址和地址中的句点数

时间:2015-02-17 02:20:05

标签: c++

我在业余时间尝试学习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)

1 个答案:

答案 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;就最准确的整体覆盖而言。