文章目录

  • C语言两种方法判别指定字符串是否被另一字符串包含
    • 一、方案一
      • 1、代码
      • 2、结果
    • 二、方案二
      • 1、代码
      • 2、结果
    • 三、方案三
      • 1、代码
      • 2、结果
    • 四、参考链接

C语言两种方法判别指定字符串是否被另一字符串包含

一、方案一

1、代码

/* 程序目的:判断指定字符串是否包含在另一个字符串中*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int is_in(char *wenben, char *search_word);
int find(char *buf, char *sub);
int main()
{// 调用函数一if (is_in("机房机房就感觉贾继康", "贾继康") == 1) // 调用函数:参数二:比较文本,参数一:原文本{printf("\n包含");}else{printf("\n不包含");}
}// 创建函数(方法一):是否包含字符串函数
int is_in(char *wenben, char *search_word)
{int i = 0, j = 0, flag = -1;while (i < strlen(wenben) && j < strlen(search_word)){if (wenben[i] == search_word[j]){ //如果字符相同则两个字符都增加i++;j++;}else{i = i - j + 1; //主串字符回到比较最开始比较的后一个字符j = 0;         //字串字符重新开始}if (j == strlen(search_word)){             //如果匹配成功flag = 1; //字串出现break;}}return flag;
}

2、结果

二、方案二

1、代码

/* 程序目的:判断指定字符串是否包含在另一个字符串中*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int is_in(char *wenben, char *search_word);
int find(char *buf, char *sub);
int main()
{// 调用函数二char buf[] = "贾继康几点服";if (find(buf, "贾继康") == 1)printf("\n是子串");elseprintf("\n不是子串");system("pause");
}// 创建函数(方法二):是否包含字符串函数
int find(char *buf, char *sub) // 参数一:主文本,参数二:待查词
{int len = strlen(buf);                 // 主文本长度char *p = (char *)malloc(len * 2 + 1); // 动态内存分配memset(p, 0x00, len * 2 + 1); // 0x00:0---》 p:指针或者数组,0x00:赋给p的值 p的长度strcpy(p, buf);               // 将buf复制到P中strcat(p, buf);               //把buf所指字符串添加到p结尾处(覆盖p结尾处的'\0')并添加'\0'。返回指向p的指针。if (strstr(p, sub) == NULL){ //在字符串p中查找第一次出现字符串sub的位置,不包含终止符 '\0'。return 0;}else{return 1;}
}

2、结果

三、方案三

1、代码

/* 程序功能:1: 判断原字符串是否包含指定字符串2: 返回第一次包含出现的位置*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int find(char *source, char *target);
int main()
{// 调用函数二char buf[] = "贾继康测试贾继康"; //  char buf2[] = "贾继康测试贾继康";char buf3[] = "继康"; //  char *p = buf;char *p2 = buf3;// printf("数组所占空间大小:%d\n", sizeof(buf2));// printf("%c",*(p+3));if (find(buf, buf3) == 1){printf("有");}else{printf("无");}
}// 创建函数
// source为源字符串,target为子字符串,如找到则返回在源串中的位置,
//如未找到则返回-1,如果要改为找到返回1,把return i改为return 1;
int find(char *source, char *target)
{int i, j;//原字符和目标字符位置int s_len = strlen(source); // 原字符串长度int t_len = strlen(target); //  目标字符串长度int weizhi = 0;/* if (t_len > s_len) // 目标字符串长度< 原字符串长度{return -1;} */for (i = 0; i <= s_len; i++){j = 0;int flag = 1;// 从i=0,j=0 开始if (source[i] == target[j]) // 待查字符与原字符中的字符相等时{   int k, p = i;               // 这里将p=i:获取目标字符当前的位置weizhi++;//位置for (k = 0; k < t_len; k++) // 以目标字符串作为遍历次数。进一步遍历原字符{if (source[p] == target[j]) // 继续相同{p++;// 相同位置上:继续前移j++;continue;}else{flag = 0;break;}//printf("第一次当前%d");}} // 当source[i] == target[j]对应位置的字符不相等else{continue; // 下一个}//printf("位置%d\n",weizhi);if (flag == 1){printf("此时原字符串指针i的位置 %d\n", i);printf("此时比较字符串指针j的位置 %d\n",j);printf("比较字符串在原字符串中第一次出现的位置 %d\n\n", i-strlen(target)+2);// i-strlen(c)+2return 1;  }}return -1;
}

2、结果

四、参考链接

1、https://blog.csdn.net/kkwant/article/details/81133814
2、https://blog.csdn.net/meiqi0538/article/details/83819727

【C】C语言三种方法判别指定字符串是否被另一字符串包含相关推荐

  1. python计算今年第几天_Python三种方法计算指定日期是今年的第几天

    今天早上和腾讯面试官进行了视频面试,由于音量和网络以及我的垃圾电脑的原因,个人感觉黄了... 最后面试官给了我一道简单的计算题:指定日期是今年的第几年 由于电脑卡到打字都打不动,我勉勉强强写了一点,虽 ...

  2. c语言三种方法求n的k次方

    // 方法一:递归 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int Pow ...

  3. 用python计算今天是今年的第几天_Python计算指定日期是今年的第几天(三种方法)...

    今天早上和腾讯面试官进行了视频面试,由于音量和网络以及我的垃圾电脑的原因,个人感觉黄了... 最后面试官给了我一道简单的计算题:指定日期是今年的第几年 由于电脑卡到打字都打不动,我勉勉强强写了一点,虽 ...

  4. java字符串abc反转_JAVA字符串反转的三种方法

    方法一:使用StringBuilder import java.util.Scanner; public class StrReversal { public static void main(Str ...

  5. 易语言删除数组里的指定成员的三种方法

    我们想从从数组里删除指定成员的时候,首先要遍历数组, 找到对应的成员名称,然后使用删除成员命令来删除.以下提供了三种思路. 方法一: 窗口程序集名 保 留 保 留 备 注 窗口程序集1 子程序名 返回 ...

  6. C语言函数怎么像python那样返回多个值?(三种方法:1、设置全局变量 2、传递指针 3、使用结构体返回不同类型的数据)

    引用文章:c语言函数可不可以返回多个值 文章目录 方法一:设置全局变量 例如:利用一个函数求出正方形的周长和面积. 方法二:使用数组名或指针作为函数的形参 实例2:编写函数求一维整形数组的最大值与最小 ...

  7. c语言数组最大可定义多少位_C语言求数组的最大值三种方法

    /* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...

  8. Java | Java语言在Eclipse控制台输入的三种方法

    写在前面的内容,java控制台输入浅尝辄止即可 >>> 文章目录 三种方法比较一览图 方法一:in/out public static final InputStream in//静 ...

  9. [mysql]三种方法为root账户指定密码

    前言:前段时间把mysql安装后一直没管它,当时就在奇怪为什么mysql登陆不要密码,原来一直用的超用户账户登陆的(简称超级用户) 其实只怪自己太无知,之前一直用的phpbydamin进行的数据库的可 ...

最新文章

  1. MLPerf训练最新发榜:谷歌、NV、浪潮 ,冠军榜“三国杀”
  2. 简述计算机的网络技术,简述新式计算机网络技术及应用
  3. Bootstrap的lia
  4. python的解释提示符为_python学习笔记01--基础
  5. 前端可视化编程:liveReload安装,sublime 3
  6. JavaScript String支持的辅助format函数+【分页1】
  7. python循环for不从零开始_Python-多处理-巨大的for循环
  8. TSCAN算法matlab,使用TscanCode和scan-build进行静态分析
  9. 是否可以在git中预览藏匿内容?
  10. 泰拉瑞亚Terraria for Mac(动作冒险游戏)
  11. Spotfire 条形图属性 直线和曲线 格式设置
  12. 33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作
  13. Google Drive—谷歌云盘大文件下载
  14. GTA5 无法登陆,无法创建登陆令牌问题解决
  15. 音乐app、音乐原型、在线音乐、云音乐、听歌、电台、本地音乐、点赞、收藏、歌单广场、动态、社区、评论、歌词、歌手、主播、视频、云村、下载、翻唱、歌曲播放、订阅、频道、引导页、登录注册、axure原型
  16. 西门子PLC与Unity3D通讯丨串口通讯
  17. 【博学谷学习记录】超强总结,用心分享|大数据之Hive
  18. 树袋熊无线网络打印服务器,2大1小完美澳洲自驾之旅(第九天:树袋熊之旅)—2013完整版(社区系统故障更新中)...
  19. vscode 快捷键高效写代码
  20. 数据重复(唯一索引的设置)

热门文章

  1. 常见的web攻击技术
  2. HTTP/2怎么了?做错了什么?刚刚辉煌2年就要被弃用了?
  3. 关于Maven项目打包时没有资源文件的问题
  4. 实例分析join、left join、right join、fulljoin间的区别
  5. 【回眸】Linux内核(六)进程是什么?如何复刻查看进程号命令?
  6. ROG支持安装linux系统吗,华硕ROG安装ubuntu18.4+CUDA10.0+CUDNN7.4
  7. 计算机网络--应用层Web简单介绍
  8. 动态线程池dynamic-tp快速接入
  9. NFS 服务器的搭建
  10. 特征提取网络之Densnet