问题描述:
字符串 abcdefg
子字符串 ab
子字符串de
输出是 正向匹配 方向匹配还是正反向都匹配 还是都不匹配
代码如下:
#include<stdio.h>
#include<string.h>
char * searche(char *huoche_p,char *see1_p)
{
int see1_length = strlen(see1_p);
while(*huoche_p != '\0')
{
printf("*huoche_p = %c, see1_p= %c\n",*huoche_p,*see1_p);
if(*huoche_p == *see1_p)
{
char * tmp1 = huoche_p;
char *tmp2 = see1_p;
int num =0;
while(*tmp2 != '\0')
{
printf("-----*huoche_p = %c, see1_p= %c\n",*tmp1,*tmp2);
if(*tmp1++ == *tmp2++)
{
num++;
}
else break;
}
if(num == see1_length)
{
huoche_p = tmp1--;
return huoche_p;
}
else huoche_p++;
}
else{huoche_p++;
printf("%c\n",*huoche_p);
}
}
return NULL;
}
char * backsearche(char * huoche_p,char * see1_p,int size)
{
int see1_length = strlen(see1_p);
while(size != 0)
{
printf("size = %d\n",size);
printf("*huoche_p = %c, see1_p= %c\n",*huoche_p,*see1_p);
if(*huoche_p == *see1_p)
{
char * tmp1 = huoche_p;
char *tmp2 = see1_p;
int num =0;
while(*tmp2 != '\0')
{
printf("-----*huoche_p = %c, see1_p= %c\n",*tmp1,*tmp2);
if(*tmp1-- == *tmp2++)
{
num++;
}
else break;
}
if(num == see1_length)
{
huoche_p = tmp1--;
return huoche_p;
}
else {
huoche_p--;
size--;
}
}
else{
huoche_p--;
size--;
}
}
return NULL;
}
int main()
{
char huoche[100000];
char see1[100];
char see2[100];
scanf("%s",huoche);
scanf("%s",see1);
scanf("%s",see2);
printf("%s\n",huoche);
printf("%s\n",see1);
printf("%s\n",see2);
int huoche_len = strlen(huoche);
int see1_len = strlen(see1);
int see2_len = strlen(see2);
printf("huoche_len = %d,see1_len = %d, see2_len = %d\n",huoche_len,see1_len,see2_len);
int forwardflag =0;
int backwardflag = 0;
char *p = huoche;
char * result = searche(p,see1);
if(result == NULL) forwardflag = 0;
else result = searche(result,see2);
if(result == NULL) forwardflag =0;
else forwardflag = 1;
printf("---------------------------------------\n");
int huochelength = strlen(huoche);
p = huoche+huochelength -1 ;
result = backsearche(p,see1,huochelength);
if(result == NULL) backwardflag = 0;
else {
int size = strlen(result);
result = backsearche(result,see2,size);
}
if(result == NULL) backwardflag =0;
else backwardflag = 1;
printf("forwardflag = %d, backwardflag = %d\n",forwardflag,backwardflag);
if(forwardflag == 1 &&backwardflag ==0 )
{
printf("forward\n");
}
if(forwardflag == 0 &&backwardflag ==1 )
{
printf("backward \n");
}
if(forwardflag == 1 &&backwardflag ==1 )
{
printf("both \n");
}
if(forwardflag == 0 &&backwardflag ==0)
{
printf("invalid \n");
}
}