密码长度必须大于等于8个字符
必须包含大小写字母和数字字符
用户设置密码后给出相应提示:不符合安全性要求则提示“不成功”,显示原因,并要求重新进行设置;若符合要求则提示“设置成功!”,并结束程序运行。
完全根据你的要求来,基于new bing加以修改过后的编写:
实现思路:我们采用while循环不断要求用户输入密码,并进行判断,直到符合安全性要求为止。具体实现步骤如下:
【1】使用scanf()函数获取用户输入的密码字符串,并保存到字符数组变量password中。
【2】使用strlen()函数计算密码的长度,再使用isdigit()、islower()和isupper()等函数分别统计数字个数、小写字母个数和大写字母个数。
【3】对于符合要求的密码,输出“设置成功!”提示语句,并使用break语句跳出while循环,直接结束程序运行;对于不符合要求的密码,输出错误信息提示用户重新设置密码。
【4】在整个程序的末尾,在main函数中返回整数值0以表示程序正常运行结束。
#include <stdio.h>
#include <ctype.h> // 用于判断字符属性的头文件
#include <string.h> // 用于操作字符串的头文件
int main()
{
char password[20]; // 假设密码不超过20个字符
int length,i,num_count = 0, lower_count = 0, upper_count = 0;
while (1) {
printf("请设置您的密码:\n");
scanf("%s", password);
length = strlen(password);
// 计算密码长度、数字个数、小写字母个数和大写字母个数
for (i = 0; i < length; ++i) {
if (isdigit(password[i]))
num_count++;
else if (islower(password[i]))
lower_count++;
else if (isupper(password[i]))
upper_count++;
}
// 判断密码是否符合要求,若符合则输出“设置成功!”,并结束程序运行;否则输出错误信息,要求重新设置密码。
if (length >= 8 && num_count > 0 && lower_count > 0 && upper_count > 0)
{
printf("设置成功!\n");
break;
}
else
{
printf("不成功,密码需要满足以下要求:\n");
printf("1. 长度大于等于8个字符。\n");
printf("2. 包含至少一个数字字符,一个小写字母和一个大写字母。\n");
}
}
return 0;
}
#include <stdio.h>
#include <regex.h>
int main() {
char password[100];
regex_t reg;
int ret;
printf("密码:");
scanf("%s", password);
ret = regcomp(®, "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\\\d)[a-zA-Z\\\\d]{8,}$", REG_EXTENDED);
if (ret != 0) {
printf("编译失败!\\n");
return 1;
}
ret = regexec(®, password, 0, NULL, 0);
if (ret == 0) {
printf("right\\n");
} else {
printf("不成功!密码长度必须大于等于8个字符,且必须包含大小写字母和数字字符。\\n");
}
regfree(®);
return 0;
}
封装了一个函数进行判断,运行结果如下:
代码:
#include <stdio.h>
#include <string.h>
int check(const char* pwd)
{
int i, len;
int flagBigChar = 0,flagSmlChar=0, flagNmb = 0; //是否包含大写字母、小写字母、数字
len = strlen(pwd); //计算长度
//1.判定长度
if (len < 8)
{
printf("不成功:密码长度不足8位,请重新输入:");
return -1; //返回-1,表示密码长度不足8位
}
//2.判定是否包含大写字母和数字字符
for (i = 0; i < len; i++)
{
if (pwd[i] >= 'A' && pwd[i] <= 'Z')
flagBigChar = 1; //包含大写字母
if (pwd[i] >= 'a' && pwd[i] <= 'z')
flagSmlChar = 1; //包含小写字母
if (pwd[i] >= '0' && pwd[i] <= '9')
flagNmb = 1; //包含数字
}
if (flagBigChar == 1 && flagSmlChar == 1 && flagNmb == 1)
{
printf("设置成功!\n");
return 1;
}
else
{
printf("不成功:密码必须包含");
if (flagBigChar == 0)
printf("大写字母");
if (flagSmlChar == 0)
printf("小写字母");
if (flagNmb == 0)
printf("数字");
printf(",请重新输入:");
return -2;
}
}
int main()
{
char buf[100] = { 0 };
printf("请输入密码:");
while (1)
{
scanf("%s",buf);
if (check(buf) == 1)
break;
}
return 0;
}
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char password[20];
int length, has_digit, has_upper, has_lower;
do {
printf("请输入密码:");
scanf("%s", password);
length = strlen(password);
has_digit = has_upper = has_lower = 0;
if (length < 8) {
printf("密码长度必须大于等于8个字符\n");
}
else {
for (int i = 0; i < length; i++) {
if (isdigit(password[i])) {
has_digit = 1;
}
else if (isupper(password[i])) {
has_upper = 1;
}
else if (islower(password[i])) {
has_lower = 1;
}
}
if (!has_digit || !has_upper || !has_lower) {
printf("密码必须包含大小写字母和数字字符\n");
}
else {
printf("设置成功!\n");
return 0;
}
}
} while (1);
}
```
可以一试
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char password[100];
printf("请输入密码: ");
scanf("%s", password);
int length = strlen(password);
if (length < 8) {
printf("不成功,密码长度必须大于等于8个字符\n");
return 0;
}
int hasUpper = 0, hasLower = 0, hasDigit = 0;
for (int i = 0; i < length; i++) {
if (isupper(password[i])) hasUpper = 1;
if (islower(password[i])) hasLower = 1;
if (isdigit(password[i])) hasDigit = 1;
}
if (!hasUpper || !hasLower || !hasDigit) {
printf("不成功,密码必须包含大小写字母和数字字符\n");
return 0;
}
printf("设置成功!\n");
return 0;
}
可以借鉴下
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char arr[101] = { 0 };
int n = 0;
scanf("%d", &n); //输入要检查的密码的个数
getchar();
for (int i = 0; i < n; i++)
{
int a = 0;
int b = 0;
int c = 0;
int flag = 0;
scanf("%s", arr);
getchar(); //吸收回车键
for (int j = 0; j < strlen(arr); j++)
{
if (strlen(arr) < 8) //4. 密码长度至少为8
{
flag = 1;
printf("NO\n");
break;
}
if ((arr[0] > '0') && (arr[0] < '9')) //2.密码不能以数字开头;
{
flag = 1;
printf("NO\n");
break;
}
if (!(((arr[j] >= '0') && (arr[j] <= '9')) || ((arr[j] >= 'A') && (arr[j] <= 'Z')) || ((arr[j] >= 'a') && (arr[j] <= 'z')))) //1.密码只能由大写字母,小写字母,数字构成;
{
flag = 1;
printf("NO\n");
break;
}
if ((arr[j] > '0') && (arr[j] < '9'))
{
a = 1;
}
if ((arr[j] > 'A') && (arr[j] < 'Z'))
{
b = 1;
}
if ((arr[j] > 'a') && (arr[j] < 'z'))
{
c = 1;
}
if ((j == strlen(arr) - 1) && (a + b + c < 2)) //3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
{
flag = 1;
printf("NO\n");
break;
}
}
if (flag == 0)
{
printf("YES\n");
}
}
system("pause");
return 0;
}
class HighPrecisionTimer
{
public:
HighPrecisionTimer(void)
{
QueryPerformanceFrequency(&CPU频率);
}
~HighPrecisionTimer(void){}
void 开始()
{
QueryPerformanceCounter(&开始时间);
}
void 结束()
{
QueryPerformanceCounter(&结束时间);
间隔 = ((double)结束时间.QuadPart - (double)开始时间.Quadpart)/(double)CPU频率.QuadPart;
}
double 间隔毫秒()const
{
return 间隔 *1000;
}
pricate:
double 间隔;
LARGE_INTEGER 开始时间;
LARGE_INTEGER 结束时间;
LARGE_INTEGER CPU频率;
};