标题
字符串查找
类别
字符串处理
时间限制
2S
内存限制
256Kb
问题描述
给出一个字符串和多行文字,输出在这些文字中出现了指定字符串的行。
程序还需要支持大小写敏感选项:
当选项打开时,表示同一个字母的大写和小写看作不同的字符;
当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入说明
输入数据第一行包含一个字符串s,由大小写英文字母组成,长度不超过100。
第二行包含一个数字,表示大小写敏感选项。当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
第三行包含一个整数n,表示给出的文字行数。
接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。每个字符串长度不超过100。
输出说明
输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串s的行。
输入样例
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
输出样例
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello
#include<stdio.h>
#include<string.h>
char conv(char);
int main()
{
char std[100];
int flag;
int n;
scanf("%s",std);
scanf("%d",&flag);
scanf("%d",&n);
getchar(); //消除缓冲区的\n字符
char a[n][100];
for(int i=0;i<n;i++)
{
gets(a[i]);
}
if(flag) //sensitive
{
for(int j=0;j<n;j++)
{
if(strstr(a[j],std)!=NULL) printf("%s\n",a[j]); //strstr()函数见string.h
}
}
else //dull
{
for(int j=0;j<n;j++) //一层循环找字符串
{
for(int i=0;i<strlen(a[j])-strlen(std)+1;i++) //二层循环找字符串中字符
{
if(a[j][i]==std[0]||std[0]==conv(a[j][i]))
{
int f=0;
for(int k=i;k<i+strlen(std);k++) //条件循环判断剩余字符是否符合
{
if(a[j][k]==std[k-i]||a[j][k]==conv(std[k-i])) f++;
}
if(f==strlen(std)) printf("%s\n",a[j]);
}
}
}
}
return 0;
}
char conv(char p)
{
if(p>='a'&&p<='z') return p-32;
if(p>='A'&&p<='Z') return p+32;
else return p;
}