当时做的时候没有考虑全面导致,没有ac成功,写代码之间思路一定要清晰,把所有可能的情况都考虑清楚。
#include <stdio.h>
#include <string.h>
int main(void)
{
char qizhi[100];
char first[100];
char second[100];
char *ptr;
while(scanf("%s",qizhi)&&scanf("%s",first)&&scanf("%s",second)){
int forward=0,backward=0;
if(strstr(qizhi,first)){
ptr=strstr(qizhi,first);
char *p;
if(strstr(ptr,second))
{
p=strstr(ptr,second);
forward=1;
}
}
strrev(qizhi);
if(strstr(qizhi,first)){
ptr=strstr(qizhi,first);
char *p;
if(strstr(ptr,second))
{
p=strstr(ptr,second);
backward=1;
}
}
if(forward==1&&backward!=1)
printf("forward\n");
else if(backward==1&&forward!=1)
printf("backward\n");
else if(backward==1&&forward==1)
printf("both\n");
else
printf("invalid\n");
}
return 0;
}
下面是不调用库函数写的:
#include<stdio.h>
#include<string.h>
int exist(char a[],char b[],char c[]){
int i,j=0,k=0,x1=0,x2=0;
for(i=0;a[i]!='\0';i++){
if(a[i]!=b[0])
continue;
else{
while(a[i]==b[j]&&b[j]!='\0')
{
i++;
j++;
}
if(b[j]=='\0')
{
x1=1;
break;
}else{
j=0;
i=i-1;
}
}
}
j=0;
for(k=i;a[k]!='\0';k++)
{
if(a[k]!=c[0])
continue;
else{
while(a[k]==c[j]&&c[j]!='\0')
{
k++;
j++;
}
if(c[j]=='\0')
{
x2=1;
break;
}else{
j=0;
k=k-1;
}
}
}
return x1&&x2;
}
int main(){
char qizhi[100];
char first[100];
char second[100];
while(scanf("%s",qizhi)&&scanf("%s",first)&&scanf("%s",second)){
int x1,x2;
x1=exist(qizhi,first,second);
char *ret1 = strrev(qizhi);//字符串逆序
x2=exist(ret1,first,second);
if(x1==1&&x2!=1)
printf("forward\n");
else if(x2==1&&x1!=1)
printf("backward\n");
else if(x1==1&&x2==1)
printf("both\n");
else
printf("invalid\n");
}
return 0;
}
不使用库函数的时候,中间的变量移动一定要搞清楚