首页 > 解决方案 > 如何在类中编写优化的构造函数 >

问题描述

我写了一个电子邮件课程,但我不确定这是否是编写这个的最佳方式......这是它的代码......

class email
{
    string value;
    string domain;
    string com;
    string username;
    string encrypted;
    bool state ;
public:
    email(const string& val)
        :value{ val}, state{false},com(),domain(),username(),encrypted()
    {
        for (int i = 0; i < value.size(); ++i)
        {
            if (value[i] == '@')
            {
                username = value.substr(0, i);
                for (int j = i; j < value.size(); ++j)
                {
                    if (value[j] == '.')
                    {
                        domain = value.substr(i, j);
                        com = value.substr(j+1, value.size()-1);
                        state = true;
                    }
                }
            }
        }
        if (state)
        {
            for (auto letter : value)
            {
                if (letter == ';' || letter == '\'' || letter == '[' || letter == ']')
                {
                    state = false;
                    
                }
            }

        } else throw "invalid string";
        if (state)
        {
            encrypted = username;
            for (int i = 0; i < username.size() / 2; ++i)
            {
                swap(encrypted[i], encrypted[encrypted.size() - 1 - i]);
                encrypted[i] = static_cast<char>(static_cast<int>(encrypted[i]) + 3);
                
            }
        }else throw "invalid charecters";
    }
    const string& get_domain() { return domain; }
    const string& get_username() { return username; }
    const string& get_com() { return com; }
    const string& get_enc() { return encrypted; }
    const  bool good () const { return state; }
};

它还没有完成,这只是我记忆中的一个快速草图,因为我现在没有实际的代码,我的问题是我应该创建另一个类来支持电子邮件类..还是这是正确的方法?我在构造函数中写了很多代码,这就是我担心的。

标签: c++class

解决方案


如果你已经完成了你的工作,你可以打破 for 循环。第一个for:找到'@'后不必循环到最后第三个for:发现错误后,可以立即抛出


推荐阅读