用C++写一个密码生成程序,按要求生成指定长度的密码,放在一个数组中输出,构成密码的所有字符为可见字符,密码必须包含大写,小写字母,数字,其他符号四类,每类最少两个
时间: 2023-09-03 12:26:24 浏览: 326
### 回答1:
以下是一个 C++ 实现的密码生成程序,可以按照要求生成指定长度的密码,包含大写、小写字母、数字和其他符号,每类字符至少两个。
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int length;
cout << "Enter the length of the password: ";
cin >> length;
// 初始化随机数种子
srand(time(NULL));
// 定义包含可见字符的字符集合
const string charset =
"0123456789"
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"!@#$%^&*()-_=+[]{}\\|;:'\",.<>/?";
// 定义密码数组并初始化为零
char password[length+1] = {0};
// 生成包含大写字母、小写字母、数字和其他符号的字符
password[0] = 'A' + rand() % 26; // 大写字母
password[1] = 'a' + rand() % 26; // 小写字母
password[2] = '0' + rand() % 10; // 数字
password[3] = charset[rand() % charset.length()]; // 其他符号
password[4] = charset[rand() % charset.length()]; // 其他符号
// 生成剩余的字符
for (int i = 5; i < length; i++) {
password[i] = charset[rand() % charset.length()];
}
// 输出密码
cout << "Your password is: " << password << endl;
return 0;
}
```
该程序会要求用户输入密码长度,然后生成一个包含大写字母、小写字母、数字和其他符号的密码,并将其放入一个字符数组中输出。程序使用了 C++ 的随机数生成器来生成密码中的随机字符。
### 回答2:
以下是一个用C语言编写的密码生成程序,根据要求生成指定长度的密码,并将密码放在一个数组中输出。程序确保密码包含大写字母、小写字母、数字和其他符号四类字符,且每类字符至少有两个。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 生成指定范围内的随机数
int generateRandomNumber(int min, int max) {
return (rand() % (max - min + 1)) + min;
}
// 随机生成指定类型的字符
char generateRandomChar(char start, int range) {
return start + generateRandomNumber(0, range);
}
// 生成密码
void generatePassword(char *password, int length) {
// 分别存储四种类型的字符
char upperLetters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char lowerLetters[] = "abcdefghijklmnopqrstuvwxyz";
char digits[] = "0123456789";
char symbols[] = "!@#$%^&*";
// 随机生成两个大写字母
password[0] = generateRandomChar(upperLetters[0], 25);
password[1] = generateRandomChar(upperLetters[0], 25);
// 随机生成两个小写字母
password[2] = generateRandomChar(lowerLetters[0], 25);
password[3] = generateRandomChar(lowerLetters[0], 25);
// 随机生成两个数字
password[4] = generateRandomChar(digits[0], 9);
password[5] = generateRandomChar(digits[0], 9);
// 随机生成两个其他符号
password[6] = generateRandomChar(symbols[0], 6);
password[7] = generateRandomChar(symbols[0], 6);
// 随机生成剩余字符
for (int i = 8; i < length; i++) {
int randomCategory = generateRandomNumber(0, 3);
switch (randomCategory) {
case 0:
password[i] = generateRandomChar(upperLetters[0], 25);
break;
case 1:
password[i] = generateRandomChar(lowerLetters[0], 25);
break;
case 2:
password[i] = generateRandomChar(digits[0], 9);
break;
case 3:
password[i] = generateRandomChar(symbols[0], 6);
break;
}
}
// 打乱密码数组中的字符顺序
for (int i = 0; i < length; i++) {
int randomIndex = generateRandomNumber(0, length - 1);
char temp = password[i];
password[i] = password[randomIndex];
password[randomIndex] = temp;
}
}
int main() {
int length = 10; // 指定密码的长度
char password[length + 1]; // 声明一个数组来存储生成的密码
// 生成种子
srand(time(NULL));
// 生成密码
generatePassword(password, length);
// 输出密码
printf("生成的密码为:");
for (int i = 0; i < length; i++) {
printf("%c", password[i]);
}
printf("\n");
return 0;
}
```
该程序通过随机生成各种类型的字符,按照要求生成密码。同时,通过打乱生成的密码数组中的字符顺序,增加了密码的随机性和复杂度。
### 回答3:
下面是用C语言编写的一个密码生成程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 生成指定范围内的随机数
int getRandomNumber(int min, int max) {
return rand() % (max - min + 1) + min;
}
// 生成随机大写字母
char getRandomUppercaseLetter() {
return getRandomNumber(65, 90);
}
// 生成随机小写字母
char getRandomLowercaseLetter() {
return getRandomNumber(97, 122);
}
// 生成随机数字
char getRandomNumberCharacter() {
return getRandomNumber(48, 57);
}
// 生成随机特殊字符
char getRandomSpecialCharacter() {
return getRandomNumber(33, 47);
}
// 生成密码
void generatePassword(char password[], int length) {
int uppercaseCount = 0, lowercaseCount = 0, numberCount = 0, specialCount = 0;
for (int i = 0; i < length; i++) {
if (i < 2 || uppercaseCount == 0) {
password[i] = getRandomUppercaseLetter();
uppercaseCount++;
} else if (i < 4 || lowercaseCount == 0) {
password[i] = getRandomLowercaseLetter();
lowercaseCount++;
} else if (i < 6 || numberCount == 0) {
password[i] = getRandomNumberCharacter();
numberCount++;
} else if (i < 8 || specialCount == 0) {
password[i] = getRandomSpecialCharacter();
specialCount++;
} else {
int randomType = getRandomNumber(1, 4);
switch (randomType) {
case 1:
password[i] = getRandomUppercaseLetter();
uppercaseCount++;
break;
case 2:
password[i] = getRandomLowercaseLetter();
lowercaseCount++;
break;
case 3:
password[i] = getRandomNumberCharacter();
numberCount++;
break;
case 4:
password[i] = getRandomSpecialCharacter();
specialCount++;
break;
}
}
}
password[length] = '\0';
}
int main() {
srand(time(0)); // 使用当前时间作为随机数种子
int length;
printf("请输入密码的长度: ");
scanf("%d", &length);
char password[length + 1];
generatePassword(password, length);
printf("生成的密码为:%s\n", password);
return 0;
}
```
这个程序通过生成随机数的方式来生成包含大写字母、小写字母、数字和其他特殊字符的指定长度密码。首先确定每类字符至少有两个,然后在剩余的位置上随机选择四类字符生成密码。最后将生成的密码存储在字符数组中,并输出。
阅读全文