1010: [字符串]作弊揭发者
题目描述
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统。当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字、字母序列识别车牌,通过连接车管所车辆信息数据库确认车辆,进行扣费。
斗智斗勇的好戏一般从此处展开…
一些车主通过在停车时遮挡车牌上的一个或多个数字、字母序列,来阻碍识别系统的识别工作,以此逃避停车费用的缴纳。
车主这简直是用轻轻的一挡搞出来一个世界难题有木有?!管理是一方面,技术解决才是王道啊。
这么难的项目不得不交给计蒜客实验室了。D 神负责识别颜色,E 神负责型号识别,可能的车牌范围就这么一点点的被缩小了。作为实习生的蒜头也是任务艰巨,将已经存在车辆数据库中的可与当前已知信息相匹配的车牌信息筛选出来,这可是整个项目的第一步啊,重要性我就不多说了,加油吧。
输入
输入文件的第一行包含 9 个字符的字符序列代表识别的。
其中可识别的字符已由大写字母和数字显示,“*”表示因为遮挡而未被识别的字符。
输入文件的第二行包含一个整数 n (1 ≤ n ≤ 100) —— 机动车数据库中的牌照信息的数量。
接下来 n 行,包含相应的牌照信息,每行一个。
牌照信息为长度为 9 的仅包含数字和大写字母的字符串。所有的牌照信息保证各不相同。
输出
输出文件的第一行为一个整数 k (0 ≤ k ≤ n) —— 符合给定要求的牌照数。
接下来的 k 行,输出所有可能的牌照信息。
样例输入
A**1MP19*
4
A001MP199
E885EE098
A111MP199
KT7351TTB
样例输出
2
A001MP199
A111MP199
题目解析:
此题难度不大,只需要使用string变量或者二维数组再用下循环和判断就可以非常容易的解决了。
题解(已通过):
#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<string>
using namespace std;
int main()
{
string x;//定义字符串变量x
int i,j,n,cou=1,k=0;
cin>>x>>n;
string a[n];
int out[n];
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=0;i<n;i++){//把字符串变量x与所有输入需要判断的字符串数组a【n】进行对比
for(j=0;j<9;j++){
if(x[j]!='*'){//由于*表示未知,所以只判断不为*的字符
if(x[j]!=a[i][j])
cou=0;//一旦遇上有一个除去*外与x中字符不同的值,把cou记作0
}
}
if(cou==1)//如果把x与字符串数组a[i]中每一个对比完后,没有出现cou==0
{
out[k]=i;//用out数组记录下字符串数组a中可能时x的下标
k++;//用k记录下个数
}
cou=1;//每次循环后,把cou归1
}
cout<<k<<"\n";
for(i=0;i<k;i++){
cout<<a[out[i]];
if(i<k-1){
cout<<"\n";
}
}
return 0;
}