分享
三行代码  ›  专栏  ›  技术社区  ›  Gamingninja5115

C++随机化字符串输出问题

  •  0
  • Gamingninja5115  · 技术社区  · 6 天前

    有人能帮我理解为什么我的代码没有按我期望的方式输出吗?

    主.cpp

    int main() {
    
    Test test;
    
    test.OutPut();
    
    return 0;
    

    试验h

    class Test
    {
    private:
        string password;
    
        string password1;
        string password2;
        string password3;
        
    public:
        char GetArrayChar();
        string RandomizedString();
        void setString();
        void OutPut();
        
    public:
        //Array varibles 
        const static int Max_value = 62;
        int Size = sizeof(Array_char) - 1;
    
    public:
        char Array_char[Max_value] = {
        '0', '1', '2', '3', '4','5', '6', '7', '8', '9',
        'A', 'B', 'C', 'D', 'E', 'F','G', 'H', 'I', 'J', 'K','L',
        'M', 'N', 'O', 'P','Q', 'R', 'S', 'T', 'U','V', 'W', 'X', 'Y', 'Z',
        'a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k','l',
        'm', 'n', 'o', 'p','q', 'r', 's', 't', 'u','v', 'w', 'x', 'y', 'z' };
    };
    

    测试.cpp

    char Test::GetArrayChar() {
        return Array_char[rand() % Size];
    }
    
    string Test::RandomizedString() {
    
        string password = "";
    
        for (int i = 0; i < 5; i++) {
            password += GetArrayChar();
        }
        return password;
    }
    
    void Test::setString() {
    
        srand(time(0));
        string password1 = password;
        string password2 = password;
        string password3 = password;
    }
    
    void Test::OutPut() {
    
        cout << "Password1 is >> " << password1 << flush;
        cout << "\nPassword2 is >> " << password2 << flush;
        cout << "\nPassword3 is >> " << password3 << flush;
    }
    

    3 回复  |  直到 6 天前
        1
  •  0
  •   paxdiablo    6 天前

    setString ,此行:

    string password1 = password;
    

    新的 局部变量,它不修改实例变量。因此,从该函数返回时,局部变量被丢弃,实例变量保持不变。

    您可以尝试:

    password1 = password;
    

    这也是中国的一个问题 randomizedString 但是,既然你 返回


    作为旁白,你似乎也没有打电话 RandomizedString 设置管柱

        2
  •  0
  •   Peter    6 天前

    1. 方法setString&RandomizedString处理局部变量,不更改对象数据字段
    2. 如果你想输入你的代码主.cpp要工作,您可能需要在默认构造函数Test::Test()中包含所有数据初始化
        3
  •  0
  •   Gamingninja5115    6 天前

    好的,谢谢paxdiablo和其他人的帮助,是的,在将来我会解释我所期待的,我认为会发生什么。不管怎样,我按照paxdiablo所说的做了,并向main添加了另一个函数调用

    int main() {
    
    Test test;
    
    test.RandomizedString();
    test.setString();
    test.OutPut();
    
    
    return 0;
    

    setString()

    void Test::setString() {
        
        srand(time(0));
        password1 = RandomizedString();
        password2 = RandomizedString();
        password3 = RandomizedString();
    }
    

    这是我要找的三个随机字符串,再次感谢