ccf考试题目 字符串匹配

luni7315 2016-08-23 07:45:40
各位大侠,能不能帮忙看看我的代码与这道题目哪里出了问题啊。。。
本地通过编译,且样例没什么问题。但是提交到ccf的测试平台上,只有20/100
始终找不到原因。
试题名称: 字符串匹配
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入格式
  输入的第一行包含一个字符串S,由大小写英文字母组成。
  第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
  第三行包含一个整数n,表示给出的文字的行数。
  接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。
输出格式
  输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。
样例输入
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
样例输出
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello
样例说明
  在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。
评测用例规模与约定
  1<=n<=100,每个字符串的长度不超过100。


#include <stdio.h>

int main(){
char a[110];
char b[110][110];
int n;
int flag;

scanf("%s",a); //读取字符串
scanf("%d",&flag);//读取是否匹配大小写
scanf("%d\n",&n); //读取文字的行数
for(int i=1;i<=n;i++)//读取各行的文字
scanf("%s",b[i]);

if(flag){//处理大小写敏感的分支
for(int i=1;i<=n;i++){
int j=0,k=0;
while(b[i][k]!='\0'){//使用最朴素的匹配方法

if(a[j]==b[i][k]){
j++;
k++;
}
else{
k=k-j+2;
j=0;
}
if(a[j]=='\0'){
printf("%s\n",b[i]);
break;
}
}
}
}else{
for(int i=1;i<=n;i++){
int j=0,k=0;
while(b[i][k]!='\0'){//处理大小写不敏感敏感的分支

if(a[j]==b[i][k]||a[j]-b[i][k]=='a'-'A'||b[i][k]-a[j]=='a'-'A'){
j++;
k++;
}
else{
k=k-j+2;
j=0;
}
if(a[j]=='\0'){
printf("%s\n",b[i]);
break;
}
}
}
}

return 0;
}

...全文
990 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,947

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧