det表示detect,存储关键字,in二维数组存储要检测的车牌
思路:读取det,in——检查in[i]字符串是否符合,如果是,就把其下标添加到order组里
——对in[order[i]]组进行排序——输出in[order[i]]组
需要注意的是,输入n之后要用getchar()吃掉回车,不然输入的第一个车牌是空的
检查函数check的思路
用指针ch表示当前检查的字符的地址,遍历某个车牌的字符,如果碰到*ch就检查下一个字符ch++,用指针可以很简单地切换到下一个要检查的字符,如果指针的元素时’\0’表示检查完了,循环退出,如果遍历完了这个车牌也没有发现,也要退出
字符串排序
可以参考实验十一(2018)D. 实验9_20_字符串排序,思路是一样的,比较的是in[order[]]组,实际交换的是order[]组的元素,最后输出in[order[]]组
#include<stdio.h>
int check(char [],char []);
int main()
{
char det[12],in[200][12];
int order[200];
int n,i,k=0,j,tmp;
gets(det);
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
gets(in[i]);
for(i=0;i<n;i++)
if(check(in[i],det))
{order[k]=i;k++;}
for(i=1;i<k;i++)
for(j=0;j<k-i;j++)
if(strcmp(in[order[j]],in[order[j+1]])>0)
{
tmp=order[j];
order[j]=order[j+1];
order[j+1]=tmp;
}
for(i=0;i<k;i++)
puts(in[order[i]]);
return 0;
}
int check(char in[],char det[])
{
int i=0,l_in=strlen(in);
char *ch=det;
while(*ch!='\0'&&i<l_in)
{
if(*ch==in[i])
ch++;
i++;
}
if(*ch=='\0') return 1;
else return 0;
}
题目描述
某处发生交通事故,肇事车辆逃逸。现场有价值的线索为若干块残缺的车牌。经技术人员分析得出以下结论,1、这些残缺的车牌来自同一块车牌且为肇事车辆悬挂;2、每块上只包含一个可以辨认的号码;3、这些号码的顺序是可以确定的。现请你根据这些信息写一段程序判断某车牌是否可能是肇事车辆当时悬挂的车牌。
输入第一行为一个字符串(字符串中只包含大写字母及数字,且长度不超过10),代表通过残缺车牌识别出的号码且这些号码已按应有的次序排好,也就是说如果在输入的字符串中某个号码(比如A)排在另外一个号码(比如B)的前边,那么在完整的车牌中A也必定在B前边;第二行为一个正整数n(0<n<200),代表待检验车牌的数量;后边n行,每行均为一个长度为10的字符串(字符串中只包含大写字母及数字),代表n个待检验车牌。
输出为若干行,每行为一个可能的肇事车辆的车牌(多行数据输出的顺序为:按字符串大小由小到大输出,如AAAAA00000在AAAAB00000前边输出)。测试用例保证输入合法且至少有一个车牌可能是肇事车辆的车牌。
输入样例
A0
2
AAA0000123
BBB0000123
输出样例
AAA0000123