首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

9度1165 字符串匹配

2013-02-17 
九度1165 字符串匹配/********************************* *日期:2013-1-29 *作者:SJF0115 *题号: 九度1165

九度1165 字符串匹配

/********************************* *    日期:2013-1-29 *    作者:SJF0115 *    题号: 九度1165 *    题目:字符串匹配 *    来源:http://ac.jobdu.com/problem.php?pid=1165 *    结果:AC *    题意: *    总结:1.如果匹配串中没有[],直接用strcmp比较            2.如果匹配串中有[],先匹配[]前后字符串,再匹配[]中字符串**********************************/#include<stdio.h>#include<stdlib.h>#include<string.h>char c[1001][1001],temp[1001][1001],c2[1001];//temp转换为小写后的数组//匹配串中没有[]void allMatch(int n){for(int i = 0;i < n;i++){if(strcmp(temp[i],c2) == 0){printf("%d %s\n",i+1,c[i]);}}}//匹配串中有[]int Match(int start,int end,int n,int index){int i,j,k;//[]前匹配for(i = 0,k = 0;i < strlen(c[index]) && k < start;i++,k++){if(temp[index][i] != c2[k]){return 0;}}//[]后匹配for(j = i + 1,k = end + 1;j < strlen(c[index]) && k < strlen(c2);j++,k++){ if(temp[index][j] != c2[k]){return 0;}}if(j < strlen(c[index]) || k < strlen(c2)){return 0;}//[]中匹配for(j = start + 1;j < end;j++){if(c2[j] == temp[index][i]){return 1;}}return 0;}int main(){int n,i,j,len;//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);while(scanf("%d",&n)!=EOF){//输入数据for(i = 0;i < n;i++){scanf("%s",c[i]);len = strlen(c[i]);//全部转换成小写便于匹配for(j = 0;j < len;j++){if(c[i][j] >= 'A' && c[i][j] <= 'Z'){temp[i][j] = c[i][j] - 'A' + 'a';}else{temp[i][j] = c[i][j];}}}//输入匹配串scanf("%s",c2);//全部转换成小写便于匹配,找[]下标int start = -1,end = -1;for(i = 0;i < strlen(c2);i++){if(c2[i] == '['){start = i;}else if(c2[i] == ']'){end = i;}if(c2[i] >= 'A' && c2[i] <= 'Z'){c2[i] = c2[i] - 'A' + 'a';}}//start = -1:匹配串中没有[]if(start == -1){allMatch(n);}else{for(i = 0;i < n;i++){if(Match(start,end,n,i)){printf("%d %s\n",i+1,c[i]);}}}}return 0;}

热点排行