————————————
本题使用到了<string.h>中的三个函数:分别为strstr、strcpy、strlen。
至于它们主要的使用方法这里不过多赘述。需要的小伙伴们,推荐https://www.cplusplus.com/reference/cstring/来查阅。
至于为什么发这么个题呢?(因为使用了函数,这算一种比较新的方法(对我??),啊哈哈。。。
————————————
问题描述
给出一个字符串和多行文字,输出在这些文字中出现了指定字符串的行。 程序还需要支持大小写敏感选项:
当选项打开时,表示同一个字母的大写和小写看作不同的字符;
当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入说明
输入数据第一行包含一个字符串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>
int main(){
char str[10000][100],copy[10000][100];//用来验证对大小写是否敏感
char str0[100],str1[100];//存原字符串,也是子串
int i,j,n,sense;//sence用来判断对大小写是否敏感、有n组数据
scanf("%s",str0);
scanf("%d %d",&sense,&n);
for(i=0;i<n;i++){
scanf("%s",str[i]);
}
if(!sense){
strcpy(str1,str0);
for(j=0;j<strlen(str1);j++){//把子串也统一成小写
if(str1[j]>='A'&&str1[j]<='Z')str1[j]+=32;
}
for(i=0;i<n;i++)strcpy(copy[i],str[i]);
for(i=0;i<n;i++){
for(j=0;j<strlen(copy[i]);j++){//转化为小写
if(copy[i][j]>='A'&©[i][j]<='Z')copy[i][j]+=32;
}
}
for(i=0;i<n;i++){
if(strstr(copy[i],str1)!=NULL) puts(str[i]);
}
}
else {
for(i=0;i<n;i++){
if(strstr(str[i],str0)!=NULL) puts(str[i]);
}
}
return 0;
}