关闭

合格的字符串

标签: openjudge水题
505人阅读 评论(0) 收藏 举报
分类:


总时间限制: 
1000ms 
内存限制: 
65535kB
描述

     老师给小学生门布置了一些作业,让它们按照一个模版写一些字符串交上来,

同学们把作业交上来了,问题来了,这么多的作业老师批改不过来,现在请你帮老师

写一个程序,帮助老师确定各个字符串是否合格。

    首先老师有一个匹配模版,比如是“aa[123]bb”这一个字符串,同学们交的各种

作业字符串如aa1bb、aa2bb、aa3bb都算是正确匹配看,而aacbb就是错误的字符串。

(即待查字符串对应于模版方括号内的部分,应该为方括号内字符串的一个子字符)。

    我们需要做的就是按照模版,找出正确的字符串和所在的行。

输入
输入的第一行为一个整数n,表示有多少个学生的作业,即有多少行需要检查的字符串。(1<=n<=50)
中间为n行字符串,代表着n个学生们写的作业。每个字符串长度小于50。
最后一行为1行字符串,代表着老师给的匹配模板。
输出
输出合格的字符串的行号和该字符串。(中间以空格隔开)
样例输入
4
Aab
a2B
ab
ABB
a[a2b]b
样例输出
1 Aab
2 a2B
4 ABB

#include<stdio.h>
#include<string.h>
int change(char a,char b){
	if(a>='a'&&a<='z'&&(a==b||a!=b&&a-32==b)){
		return 1;
	} 
	if(a>='A'&&a<='Z'&&(a==b||a!=b&&a+32==b)){
		return 1;
	}
	if(a==b){
		return 1;
	}
	return 0;
}
int isvalible(char a[],char b[]){
	int i,j,k=0,t,f1=1,f2=0,f3=1;
	char c[51];
	for(i=0,j=0;b[j]!='[';i++,j++){
		if(!change(a[i],b[j]))
		 f1 = 0;
	}
	if(b[j]=='['){
		j++;
	}
	while(b[j]!=']'){
		c[k++]=b[j++];
	}
	if(b[j]==']'){
		j++;
	}
	if(strlen(a)<strlen(b)-2-(k-1)){
		return 0;
	} 
	for(t=0;t<k;t++){
		if(change(a[i],c[t])){
	        f2 = 1;
		}
	}
	for(i++;i<strlen(a)&&j<strlen(b);i++<j++){
		if(!change(a[i],b[j])){
			f3=0;
		}
	}
	if(f1&&f2&&f3){
		return 1 ;
	}
	return 0;
}
int main(){
	char a[50][51];
	char pattern[51];
	int t,i=0,k;
	scanf("%d",&t);
	while(t--){
		scanf("%s",a[i++]); 
	} 
	scanf("%s",pattern);
	for(k=0;k<i;k++){
		if(isvalible(a[k],pattern)){
			printf("%d %s\n",k+1,a[k]); 
		}
    }
	return 0; 
} 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21681次
    • 积分:1050
    • 等级:
    • 排名:千里之外
    • 原创:86篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条
    最新评论