输入一个字符串,同时输入帧头和帧尾,将该字符串的合法帧识别出来

#include<stdio.h>


#define N 100


int main()
{
char str[N] = {0};
char head[N] = {0};               //定义数组并初始化
char tail[N] = {0};


char *a = NULL;
char *b = NULL;  //定义指针并初始化
char *c = NULL;


int i = 0;
int j = 0;  //定义整型变量
int k = 0;


a = str;
b = head;  //将数组的首地址给指针
c = tail;


printf("please input str\n");
scanf("%s",str);


printf("please input head\n");
scanf("%s",head);


printf("please input tail\n");
scanf("%s",tail);


for(i = 0; i < strlen(str); i++)
{
if(*(a + i) == *(b + j))
{                           
j++;                               
}
else
{                           
j = 0;                               //通过循环从字符串中找到帧头;
}
if(j == strlen(head))
{
j = i - j + 1;                     //找完帧头后将帧头在str中的首个字符的位置给j
break;
}
}
if(i == strlen(str))
{
printf("no head\n");                   //找不到帧头则返回
return 0;
}


k = strlen(tail) - 1;                      
for(i = strlen(str) - 1; i >= 0; i--)
{
if(*(a + i) == *(c + k))
{
k--;                              //从str的尾部向前寻找针尾
}
else
{
k = strlen(tail) - 1;
}
if(k == -1)
{
k = i + strlen(tail) - 1;         //找完后将针尾在str中尾部的位置给k
break;
}
}
if(i == -1)
{
printf("no tail\n");                  //找不到帧尾则返回
return 0;
}


printf("the result is:\n");
for(j; j <= k; j++)
{
printf("%c",*(a + j));                 //循环输出;
}


printf("\n");


a = NULL;
b = NULL;                                  //防止野指针
c = NULL;


return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值