上课编程练习六

 输入一个字符串,同时输入帧头和帧尾(可以为多个字符),将该字符串中的合法的帧识别出来。 


#include<stdio.h>  

#include<string.h>  
  
int head_flog = 0;
int tail_flog = 0;
  
char *tail(char *s, char *b)
{  
    int num = 0;
    int len_b;  
    char *temp = b;//
  
    len_b = strlen(b);
  
    if((NULL == s) || (NULL == b))
    {  
        return NULL;  
    }  
  
    if(strlen(s) < strlen(b) )  
    {  
        return NULL;  
    }  
    if(head_flog != 0)
    {  
        while((*s != '\0') && (!tail_flog))
        {  
            while(*s == *temp)  
            {  
                s++;  
                temp++;  
                num++;  
                if(num == len_b)
                {  
                    tail_flog = 1;  
                    temp = s -1;  
                    break;  
                }  
            }  
            if((num != 0)&&(num != len_b))
            {  
                num = 0;  
                temp = b;  
                s--;
            }  
            s++;  
        }  
    }  
    if(tail_flog != 0)  
    {  
        return temp;  
    }  
    else  
    {  
        printf("string illgeal!\n");  
        return NULL;  
    }  
}  
  
char *head(char *s, char *a)
{  
    int num = 0;
    int len_a;  
    char *temp = a;
  
    len_a = strlen(a);
  
    if ((NULL == s) ||(NULL == a))
    {  
        return NULL;  
    }  
  
    if (strlen(s) < strlen(a))
    {  
        return NULL;  
    }  
  
    while ((*s != '\0') && (!head_flog))
    {  
        while(*s == *temp)  
        {  
            s++;  
            temp++;  
            num++;  
            if(num == len_a)
            {  
                head_flog = 1;  
                temp = s - len_a;  
                break;  
            }  
        }  
        if((num != 0)&&(num != len_a))
        {  
            num = 0;  
            temp = a;  
            s--;
        }  
        s++;  
    }  
  
    if(head_flog != 0)
    {  
        return temp;  
    }  
    else  
    {  
        printf("string illgeal!\n");  
    }  
}  
  
int main()  
{  
    char s[100];  
    char a[5];  
    char b[5];  
    int n;
    int i;  
    char *start = NULL;  
    char *end = NULL;  
  
    printf("Enter string(<=100)!\n");  
    scanf("%s",s);  
    printf("Enter head string(<=5)!\n");  
    scanf("%s",a);  
    printf("Enter tail string(<=5)!\n");  
    scanf("%s",b);  
  
    start = head(s,a);
    end = tail(s,b);
    n = end - start + 1;  
  
    if (n > 0)
    {  
        for (i = 0; i < n; i++)  
        {  
            printf("%c",*start);  
            start++;  
        }  
        printf("\n");  
    }  
    else  
    {  
        printf("No data!\n");  
    }  
  
    return 0;  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值