当前位置: 首页 > news >正文

C语言题目初学(4)--字符串

11.找字符串的子串

遍历字符串数组,限定字符串的首个字符,然后比较后面的是不是也和要找的子串一样

#include<stdio.h>#include<string.h>intmain(){chars[100];charkey[10];scanf("%s %s",s,key);intcount=0;intslen=strlen(s);for(inti=0;i<slen;i++){if(s[i]==key[0]){inttempi=i;/* 需要 tempi 来遍历比对,同时保留 i 作为起始位置 以便匹配失败时,外层循环能从 i+1 继续尝试*///用次数判断intj=0;intlen=0;while(s[tempi]==key[j]&&s[tempi]!='\0'&&key[j]!='\0'){len++;tempi++;j++;}if(len==strlen(key)){count++;i=tempi-1;//例如s=aaaa,key=aa,写了是count=2,不写就是3}}}printf("%d",count);return0;}
#include<stdio.h>#include<string.h>intmain(){chars[100];charkey[10];scanf("%s %s",s,key);intcount=0;intslen=strlen(s);for(inti=0;i<slen;i++){if(s[i]==key[0]){inttempi=i;// 需要 tempi 来遍历比对,同时保留 i 作为起始位置// 以便匹配失败时,外层循环能从 i+1 继续尝试intflag=1;//一定要注意flag的位置//将key一一对照,加一个标记,不相同即为0intkeylen=strlen(key);for(intj=0;j<keylen;j++){if(slen-tempi<keylen){break;}if(s[tempi]!=key[j]){flag=0;break;}tempi++;}if(flag){count++;i=tempi-1;}}}printf("%d",count);return0;}

其实本来就有函数,一个标准写法

#include<stdio.h>#include<string.h>intmain(){chars[100],key[10];scanf("%s %s",s,key);intcount=0;char*p=s;while((p=strstr(p,key))!=NULL){//从p开始找这个字符串count++;p+=strlen(key);// 跳过已匹配部分(不重叠)// p++; // 如果统计重叠子串,用这个}printf("%d\n",count);return0;}

2.字符串比较

字符串比较,不能用< >这样的关系运算符,数组会比较地址
我们可以用strcmp(str1,str2)
str1>str2得到>0,<就得到<0
不一定是1或者-1

#include<string.h>charstr1[]="Hello";charstr2[]="Hello";charstr3[]="World";strcmp(str1,str2);// 返回 0(相等)strcmp(str1,str3);// 返回负数('H' < 'W')strcmp(str3,str1);// 返回正数('W' > 'H')

注意,数组名代表的是地址

if(str1==str2){// 这样不对!!比较的是地址,不是内容,永远为假printf("相等");}// 应该用 strcmpif(strcmp(str1,str2)==0){printf("相等");}

还有就是
(1)区分大小写
(2)别忘记头文件

3.字符串连接

strcat(字符串1,字符串2)

#include<string.h>charstr1[100]="Hello";charstr2[]=" World";strcat(str1,str2);// str1变成 "Hello World"

注意
1.缓冲区溢出

charstr[10]="Hello";strcat(str," World!");// ❌ 缓冲区不够,溢出!

2.初始化,字符串以’\0’结尾

charstr[100];strcat(str,"Hello");// ❌ str没有\0结尾,危险!

可以初始化为""或者放’\0’

charstr[100]="";// 初始化为空字符串strcat(str,"Hello");

3.头文件别忘了

http://www.gsyq.cn/news/1631131.html

相关文章:

  • Holoscan SDK 概述
  • 大模型推理服务架构演进2026:Serverless、K8s与边缘部署的工程选型
  • TVA在具身智能技术演进中的独特价值(9)
  • 海关合规风控进入大模型时代:稽核应对、自查自纠与内部审计如何智能化
  • 包裹计数目标检测数据集(约6000张单类别YOLO标注已划分)| 仓储物流包裹统计专用数据集
  • 加工贸易与保税账册进入大模型时代:料件、单耗、核销与账册风险如何智能管理
  • 容量规划——让资源“恰到好处“
  • 2026年免费查重网站推荐:PaperRed、毕业之家AI等8款平台对比测评
  • 基础的无线实验
  • C++ 虚继承对象内存布局
  • 4-Hadoop伪分布式搭建基本流程
  • 【干货】基础知识-图像处理
  • MC0483过园数统计
  • 影刀RPA新手教程:跨境电商选品完全指南——AliExpress热卖商品分析与竞品调研自动化
  • 助睿实验指导7:自媒体运营分析三次过程合并-CSDN博客
  • Claude Code安全审查实战:从SQL注入检测到CI/CD集成指南
  • (六)海康工业相机与halcon+C#联合编程
  • 华为MetaERP Oracle EBS 各模块业务场景及会计分录汇总表文件信息: 共 11个模块 | 300条业务场景 | 编制日期:2026年7月模块目录表格序号 模块名称 业务场景数 主
  • 做电子元器件生产的朋友,国内线圈固定胶生产厂家哪家更靠谱?
  • Azure Local 离线模式网络规划(系列篇之二)
  • PHP安全编码实践指南:从纵深防御到SQL注入与XSS防护
  • 0Ω电阻在PCB设计中的五大核心功能与应用技巧
  • 第3篇|Want 参数一传就丢:把跳转协议和接收边界写清楚
  • 前端转大模型:换个角度把学习路线落到项目证,把学习路线落到项目证据
  • 93.CODESYS/TIA 通用!模块化 ST 电机控制系统,含故障复位与时序优化
  • Linux进程池开发:O_CLOEXEC防止文件描述符泄漏
  • PHP应用安全实践:使用AES-256-GCM加密保护.env敏感配置
  • 山东悬臂架短切喷涂机工作原理
  • 利用AI智能体Codex与Skill机制,自动化拆解并生成抖音爆款带货视频
  • Linux服务器Jmeter压测实战:环境搭建、脚本优化与性能分析