关于找到字符串帧头帧尾并输出帧头到帧尾之间所有的字符c语言代码

以下是解决问题的代码,并且有了详细注释,希望对你有所帮助。
欢迎在评论区一起讨论


  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 char *find(char *str,char *flag) //此函数形参分别接受被寻找字符串的首地址和帧头或帧尾字符串首地址
  5 {
  6     int s = strlen(str);//得出被寻找字符串的总长度
  7     int h = strlen(flag);//得出帧头或帧尾字符串的长度
  8     int i;
  9     for(i = 0; i < strlen(str); i++)//这里可以稍微优化一下'i < strlen(str) - strlen(flag) + 1'不过无伤大雅。。。
 10     {
 11         if(strncmp(str + i,flag,strlen(flag)) == 0)//调用了strncmp函数,其中后两个实参传入的是帧头或帧尾首地址和其长度,至于'str+i'就是寻找功能了,str是字符串首地址,每次加一直到找到相同字符串(结合strncmp函数的作用)
 12         {
 13             return str + i;//返回值就是帧在字符串中的地址
 14         }
 15     }
 16 }
 17 int main()
 18 {
 19     char *str;//字符串
 20     str = (char *)malloc(sizeof(char) * 128);//申请了128字节空间,malloc返回了空间首地址,并被str接收了,下同;
 21     char *head;//帧头
 22     head = (char *)malloc(sizeof(char) * 8);
 23     char *tail;//帧尾
 24     tail = (char *)malloc(sizeof(char) * 8);
 25     printf("请输入一串字符串(最大128位),帧头(最大8位),帧尾(最大8位)\n");
 26     scanf("%s%s%s",str,head,tail);
 27     char *h = find(str,head);//先找帧头
 28     if(NULL == h)//如果没找可以提示用户,下同
 29     {
 30         printf("没有找到帧头!\n");
 31     }
 32     char *t = find(str,tail);//再找帧尾
 33     if(NULL == t)
 34     {
 35         printf("没有找到帧尾!\n");
 36     }
 37 //  *(t + strlen(tail)) = '\0';//如果要将帧头和帧尾以及其中的字符串都输出要这么写,自然下面一行的代码就需要被删除或注释掉
 38     *t = '\0';//如果只要两帧之间的字符串,只需将帧尾首地址所指字符赋值为‘\0’即可
 39     printf("找到的字符串如下:\n");
 40     printf("%s\n",h + strlen(head));//这里没有包含帧头,如果要包含就需要将‘strlen(head)’去掉
 41 }

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值