输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来
eg: 帧头和帧尾分别是head和tail 字符串 “asdasheadsfsafsafsfastail”中headsfsafsafsfastail是合法帧
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*
函数功能:判断是不是子串
函数参数:字符串 子串
函数返回值:是子串,返回1, 不是子串, 返回0
*/
int substr(const char *s, const char *sub)
{
int sLength = strlen(s);
int subLength = strlen(sub);
int i;
for (i = 0; i < sLength - subLength + 1; i++)
{
if(strncmp (s + i, sub, subLength) == 0)
return 1;
}
return 0;
}
/*
函数描述:获取子串的位置
函数参数:字符串 子串
函数返回值:返回子串的地址
*/
char *get_sub_addr (char *str, const char *sub)
{
int sLength = strlen(str);
int subLength = strlen(sub);
int i;
for(i = 0; i < sLength - subLength + 1; i++)
{
if(strncmp(str + i; sub, subLength) == 0)
{
return str + i;
}
}
return NULL;
}
int main()
{
char str[128] = {0};
char head[32] = {0}, tail[32] = {0};
printf("输入字符串 帧头和帧尾:\n");
scanf("%s%s%s", str, head, tail);
if(!substr(str, head) || !substr(str, tail))
{
printf("输入有误\n");
return ;
}
char *pHead = get_sub_add(str, head);
char *pTail = get_sub_addr(str, tail);
if(pHead >= pTail)
{
printf("输入错误!\n");
return ;
}
*(pTail + strlen(tail)) = '\0';
printf("%s\n", pHead);
return 0;
}