随机生成密码

randompas 设计思路
            
            void randompas(char out[], int count)
            {
                // 26+26+20=72
                char upper[] = {'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'};
                char lower[] = {'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'};
                char number[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
                char symbol[] = {'!', '@', '#', '$', '%', '^', '&', '_', '+', '='};
                srand((unsigned)time(NULL));
                for (int i = 0; i < count; i++)
                {
                    int index = rand() % 72;
                    if (index >= 0 && index < 26)
                    {
                        out[i] = upper[index];
                    }
                    if (index >= 26 && index < 52)
                    {
                        out[i] = lower[index - 26];
                    }
                    if (index >= 52 && index < 62)
                    {
                        out[i] = number[index - 52];
                    }
                    if (index >= 62 && index < 72)
                    {
                        out[i] = symbol[index - 62];
                    }
                }
            }
        
            
            PS.1 上面randmpas和图片内容实际有些不一样,减少了几个字符
            PS.2 只是按着思路去编写,一开始并没有考虑到直接将字符串看作字符数组
            PS.3 在很短的时间内运行这段程序得到的结果是一样的,这个是生成随机数的方法的问题          
        
            
            //以下是优化后的结构
            void randompas(char out[], int count)
            {
                // 合并字符集 
                char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
                                 "abcdefghijklmnopqrstuvwxyz" 
                                 "0123456789" 
                                 "!@#$%^&_+=";
                int charsetSize = sizeof(charset) - 1; // 不包括最后的空字符
                    
                srand((unsigned)time(NULL));
                for (int i = 0; i < count; i++)
                {
                    int index = rand() % charsetSize;
                    out[i] = charset[index];
                }
                out[count] = '\0'; // 确保结果以空字符结尾
            }