2020.9.8小米秋招C++开发工程师笔试第一题

7 篇文章 0 订阅
7 篇文章 0 订阅

题目描述如下:

注册网站时,需要使用包含不同类型(数字、符号、大写字母、小写字母)的字符,和特定长度。检查一个密码内容同时包含以上 4 种类型的字符,并且长度在8 - 120 个字符之间。符合要求,返回 0;长度不符合返回 1;类型不符合要求返还 2。

可以一次输入多组密码,以空格符间隔,空格符不作为密码。

输入描述

需要验证的密码,多个密码以空格符间隔,空格符不作为密码的一部分

输出描述
每个密码的检查结果,每个结果需要换行输出

样例输入
123 12345678 123abcABC!!!
样例输出
1
2
0

总之我又马后炮了,做的时候没写出main函数,做出来了就记录一下,我这里特殊字符只考虑了ascii码从33至47的字符'!'至'/',(至于能a多少我也不清楚应为当时没写出main函数,反正是肯定可以a大部分),我直接用的循环暴力,传入的参数是一个二维字符数组,一行即代表一个字符串(密码),具体代码如下:

#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
#include <algorithm>

using namespace std;
//输出的整型数字
int LengthError = 1;
int TypeError = 2;
int Pass = 0;
//函数体
void Validation(char** m,int num)
{
	for (int i = 0; i < num;++i)
	{
		//开始扫描一个密码
		bool Length = false;//初始化长度检验标志位
		//初始化类型检验标志位
		bool Type1 = false;//数字
		bool Type2 = false;//小写字母
		bool Type3 = false;//大写字母
		bool Type4 = false;//符号
		int mLength = strlen(m[i]);//每个密码的长度
		if (mLength<8||mLength>120)//长度不符合
		{
			Length = true;
		}
		for (int j = 0; j < mLength;++j)//扫描每个密码
		{
			//其中拥有任意一类型字符即把该标志位置为true
			if (m[i][j]>='0'&&m[i][j]<='9')
			{
				Type1 = true;
			}
			if (m[i][j]>='a'&&m[i][j]<='z')
			{
				Type2 = true;
			}
			if (m[i][j]>='A'&&m[i][j]<='Z')
			{
				Type3 = true;
			}
			if (m[i][j] >= '!'&&m[i][j] <= '/')
			{
				Type4 = true;
			}
		}
		//扫描完一个密码出来打印结果
		if (Length)//优先判断长度错误
		{
			cout << LengthError<< endl;
		}
		else if (!(Type1&&Type2&&Type3&&Type4))//其次判断类型错误(如果四类字符全部拥有条件为false,如果一类没有条件为true)
		{
			cout << TypeError<< endl;
		}
		else//密码无误
		{
			cout << Pass<< endl;
		}

	}
	return;
}

int main()
{
	//动态创建二维数组来存储输入
	char** mm = new char*[100];
	for (int i = 0; i < 100;i++)
	{
		mm[i] = new char[200];
	}
	char c;//获取输入的字符
	int i = 0;
	int j = 0;
	while ((c=getchar())!='\n')//如果没有输入回车
	{
		if (c!=' ')//如果输入的字符不是空格,则连续输入一个密码
		{
			ungetc(c, stdin);//把getchar从输入流取出来的字符放回输入流
			cin >> mm[i][j++];
		}
		else//如果输入了空格,则输入下一个密码
		{
			mm[i][j] = '\0';//封闭字符串
			++i;
			j = 0;
		}
	}
	mm[i][j] = '\0';//封闭最后一个输入的字符串
	int mNum = i+1;//mNum存放输入的密码数
	cout << mm[0]<< endl;
	cout << mm[1]<< endl;
	cout << mm[2]<< endl;
	cout << mNum<< endl;
	Validation(mm,mNum);

	return 0;
}

运行结果如下:

问题不太大,能想到的最直观的解法就是暴力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值