九度-1165 字符串匹配
来源:互联网 发布:爱淘宝流量 编辑:程序博客网 时间:2024/06/03 17:52
- 题目描述:
读入数据string[ ],然后读入一个短字符串。要求查找string[ ]中和短字符串的所有匹配,输出行号、匹配字符串。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。
- 输入:
输入有多组数据。
每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(不含空格),接下来输入一个匹配字符串。
- 输出:
输出匹配到的字符串的行号和该字符串(匹配时不区分大小写)。
- 样例输入:
4Aaba2BabABBa[a2b]b
- 样例输出:
1 Aab2 a2B4 ABB
代码:
# include <stdio.h># include <string.h>char s1[1000][100];char s2[1000][100];void trans(char*a,char*b){ int len,i; len=strlen(a); for (i=0;i<len;i++)if (a[i]>='A'&&a[i]<='Z') b[i]=a[i]+32; else b[i]=a[i]; b[i]='\0';}int main (){ int n,i,j,k,p,lin1,lin2,f,f2,is[100]; char in1[100],in2[100]; while (scanf ("%d",&n)!=EOF) { for (i=0;i<n;i++){ scanf ("%s",s1[i]); trans(s1[i],s2[i]); is[i]=0;}scanf ("%s",in1);trans(in1,in2); lin2=lin1=strlen(in2);for (i=0,f=0;i<lin1;i++) { if (in2[i]=='[')f=1; else if (f==1)lin2--; if (in2[i]==']')f=0;}for (i=0;i<n;i++){ if (strlen(s2[i])==lin2) { for (k=0,p=0,f=0;k<lin2;){ if (in2[p]=='[') { p++;f=1;f2=0; } else if (in2[p]==']') {p++;f=0;if (f2==0) break; } else if (f==0&&s2[i][k]==in2[p]) { p++;k++; } else if (f==1&&s2[i][k]==in2[p]) {f2=1;k++;while (in2[p]!=']') p++; } else if (f==0&&s2[i][k]!=in2[p])break; else if (f==1&&s2[i][k]!=in2[p]) p++; if (p==lin1) {is[i]=1;break; }} } }for (i=0;i<n;i++) if (is[i]==1)printf ("%d %s\n",i+1,s1[i]); } return 0;}
- 九度1165 字符串匹配
- 九度-1165 字符串匹配
- 九度oj 题目1165:字符串匹配
- 九度OJ-题目1165:字符串匹配
- 九度OJ 1165:字符串匹配 (模式匹配)
- 九度OJ 1165:字符串匹配 字符串处理
- 倒着处理的思维--包含字符串匹配和九度1510 替换空格 剑指offer03
- 九度OJ 1094:String Matching(字符串匹配) (计数)
- 九度1510(字符串)
- MySQL学习笔记之九 字符串模式匹配
- 题目1165:字符串匹配
- 题目1165:字符串匹配
- 题目1165:字符串匹配
- 题目1165:字符串匹配
- 题目1165:字符串匹配
- 字符串匹配度计算
- 【九度】题目1153:括号匹配问题
- 九度题目1153:括号匹配问题
- 约瑟夫环O(n)复杂度的解法
- OCP-1Z0-051-V9.02-58题
- 【Android】模拟Android微信APK底部的TabHost选项卡
- sed命令解析
- OCP-1Z0-051-V9.02-55题
- 九度-1165 字符串匹配
- C中位比特操作
- OCP-1Z0-051-V9.02-54题
- 关于C++/C中防止头文件的重复包含的解决办法
- Java SE学习笔记-面向对象
- 给man pages设置颜色
- Android 对图片分配多大的内存
- 架构师牛人
- C++类中的常数据成员和静态数据成员的区别