//问题描述
//给出一个字符串和多行文字,输出在这些文字中出现了指定字符串的行。
//程序还需要支持大小写敏感选项:
// 当选项打开时,表示同一个字母的大写和小写看作不同的字符;
// 当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
//
//输入说明
//输入数据第一行包含一个字符串s,由大小写英文字母组成,长度不超过100。
//第二行包含一个数字,表示大小写敏感选项。当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
//第三行包含一个整数n,表示给出的文字行数。
//接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。每个字符串长度不超过100。
//
//输出说明
//输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串s的行。
//
//输入样例
//Hello
//0
//5
//HelloWorld
//HiHiHelloHiHi
//GrepIsAGreatTool
//HELLO
//HELLOisNOTHello
//
//输出样例
//HelloWorld
//HiHiHelloHiHi
//HELLOisNOTHello
#include<stdio.h>
#include<string.h>
int l1,l2;
void transf(char a[])
{ int i;
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='a'&&a[i]<='z')
a[i]=a[i]-32;
}
}
int search(char a[],char test[],int flag)
{ int i,j,aim=0,number=0,t1,t2;
if(flag==0)
{transf(test);
transf(a);
}
int l1=strlen(a),l2=strlen(test);
for(i=0;i<l1;i++)
{
for(j=0;j<l2;j++)//主要思想还是将重复的地方找到
{if(test[j]==a[i])
for(t1=j,t2=i;a[t2]!='\0'&&test[t1]!='\0';t1++,t2++)
{if(a[t2]==test[t1])
number++;
if(number==l2)
aim=1;
}
number=0;
}
}
return aim;
}
int main()
{
char a[50][100],test[100],temp[100];
int i,j,n,flag,number=0,max=0;
scanf("%s %d %d",&test,&flag,&n);
for(i=0;i<n;i++)
{scanf("%s",&a[i]);
}
for(i=0;i<n;i++)
{
if(search(strcpy(temp,a[i]),test,flag))
puts(a[i]);
}
return 0;
}
这道题思想和这一道相似度类似不过对大小写敏感
https://blog.csdn.net/weixin_50925658/article/details/111343136