#include <stdio.h>
#include <string.h>
#define m 999
int find(char str[m], char a[m], int j)
{
int i = j; //在函数中用i代替j进行操作,保护j的数值以便进行main中下一个find
char *p1 = a; //指针*p1指向特殊字符串首字符
char *p = str + j; //指针*p指向待测字符串的第j+1个字符
while(*p != '\0') //利用指针从str的第j+1个字符进行寻找特殊字符串直至'\0'
{
if(*p == *p1) //如果第一个开头字符与特殊字符串(帧头,帧尾)相同
{ //就进入while循环分辨是否为特殊字符串
while(*p == *p1 && *p1 != '\0') //从*p1开始比较,直至28行的if循环成立,则找到了特殊字符串
{
p++;
i++; //i跟随循环,如果找到特殊字符串,则i表示特殊字符最后对应的'\0'
p1++;
}
if(*p1 == '\0')
{ //找到第一个特殊字符串后,结束循环
break;
}
}
else //如果第一个字符不同,就继续寻找,进行下一轮while循环
{
p++;
i++;
}
}
return i; //函数返回n
}
int main()
{
int i = 0;
int n = 0;
int end = 0;
int begin = 0;
char str[m];
char head[m];
char tail[m];
printf("input str:\n");
gets(str);
printf("input head:\n");
gets(head);
printf("input tail:\n");
gets(tail); //提示输入字符串以及帧头帧尾
n = find(str, head, 0); //利用find函数找到第一个帧头,返回的n对应帧头最后的'\0'
begin = n - strlen(head); //用begin记录帧头的第一个的字符位置,准备输出时作为起始
end = find(str, tail, n); //find函数找到第一个帧尾并用end记录帧尾的最后一个字符位置,输出时作为结束值
for(i = begin;i < end;i++) //打印帧头帧尾之间的字符串(包括帧头帧尾)
{
printf("%c",str[i]);
}
printf("\n");
return 0;
}
#include <string.h>
#define m 999
int find(char str[m], char a[m], int j)
{
int i = j; //在函数中用i代替j进行操作,保护j的数值以便进行main中下一个find
char *p1 = a; //指针*p1指向特殊字符串首字符
char *p = str + j; //指针*p指向待测字符串的第j+1个字符
while(*p != '\0') //利用指针从str的第j+1个字符进行寻找特殊字符串直至'\0'
{
if(*p == *p1) //如果第一个开头字符与特殊字符串(帧头,帧尾)相同
{ //就进入while循环分辨是否为特殊字符串
while(*p == *p1 && *p1 != '\0') //从*p1开始比较,直至28行的if循环成立,则找到了特殊字符串
{
p++;
i++; //i跟随循环,如果找到特殊字符串,则i表示特殊字符最后对应的'\0'
p1++;
}
if(*p1 == '\0')
{ //找到第一个特殊字符串后,结束循环
break;
}
}
else //如果第一个字符不同,就继续寻找,进行下一轮while循环
{
p++;
i++;
}
}
return i; //函数返回n
}
int main()
{
int i = 0;
int n = 0;
int end = 0;
int begin = 0;
char str[m];
char head[m];
char tail[m];
printf("input str:\n");
gets(str);
printf("input head:\n");
gets(head);
printf("input tail:\n");
gets(tail); //提示输入字符串以及帧头帧尾
n = find(str, head, 0); //利用find函数找到第一个帧头,返回的n对应帧头最后的'\0'
begin = n - strlen(head); //用begin记录帧头的第一个的字符位置,准备输出时作为起始
end = find(str, tail, n); //find函数找到第一个帧尾并用end记录帧尾的最后一个字符位置,输出时作为结束值
for(i = begin;i < end;i++) //打印帧头帧尾之间的字符串(包括帧头帧尾)
{
printf("%c",str[i]);
}
printf("\n");
return 0;
}