XDOJ字符串查找

//问题描述
//给出一个字符串和多行文字,输出在这些文字中出现了指定字符串的行。
//程序还需要支持大小写敏感选项:
// 当选项打开时,表示同一个字母的大写和小写看作不同的字符;
// 当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
//
//输入说明
//输入数据第一行包含一个字符串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

猜你喜欢

转载自blog.csdn.net/weixin_50925658/article/details/111616717