【算法入门】字符串基础

目录
- 一.字符串引言
- 1.字符串基础
- 二.洛谷P5734详解
- 1.字符串相关库函数
- 💫(1) strcpy函数 💫
- 💫(2) strcat函数 💫
- 💫(3)strstr函数 💫
- 2.题目讲解
一.字符串引言
1.字符串基础
字符串通常以\0作为结束标志,\0的ASCll码值为0,计算字符串长度时会忽略斜杠零。
二.洛谷P5734详解
1.字符串相关库函数
在讲解题目之前我们先介绍几个关于字符串操作常用的几个库函数
💫(1) strcpy函数 💫
strcpy也叫 拷贝函数 ,头文件为 string.h ,顾名思义它可以将一个字符串数组的内容拷贝到另一个数组中。
strcpy函数原型为:
char *strcat(char *dest, const char *src)
下面通过一段代码演示它的效果:
#include <stdio.h>
#include <string.h>int main()
{char ch[20] = "helloworld";char arr[10] = "xxxxxx";printf("%s", strcpy(ch, arr));return 0;
}
因为strcpy函数的返回值是拷贝后数组的地址,所以可以通过链式访问在屏幕上打印出xxxxxx,还需要注意的是拷贝函数目的数组要留够拷贝的空间不然程序会崩溃。
💫(2) strcat函数 💫
strcat函数称为追加拷贝函数 ,头文件为头文件为 string.h 。
strcat函数原型为:
char *strcat(char *dest, const char *src)
strcat可以找到目标数组的结束标志\0,并用起始数组代替\0。
我们还是用代码来演示他的效果:
#include <stdio.h>
#include <string.h>int main()
{char ch[15] = "likou";char arr[10] = "luogu";printf("%s", strcat(ch, arr));return 0;
}
结果:

这个函数同样需要在目标数组开辟足够的空间,才能 正常追加拷贝 。
💫(3)strstr函数 💫
strstr函数是字符串查找函数,文件为头文件为 string.h 。
函数原型为:
char *strstr( const char *arr1, const char *arr2 );
strstr函数可以在arr1数组中查找是否存在arr2数组中的内容,如果存在返回首次出现的地址,不存在则返回空指针 NULL。
下面用代码来演示下它的效果:

以上将几个要用得字符串函数讲解了,接下来我们看题目。
2.题目讲解
- 我们先来看一下题目:

分析: 题目考察了四个字符串的操作,只要我们掌握以上几个函数,还有熟练运用 数组下标 和字符串的 结束标志 即可。
逻辑分析与代码编写:
我们先根据题目写出整体的逻辑:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <iostream>using namespace std;char ch[110];
char in[110];int main()
{int count;cin >> count;cin >> ch;while (count--){int input;scanf("%d", &input);if (input == 1){}else if (input == 2){ }else if (input == 3){}else{}}return 0;
}
代码实现:
- 我们先实现第一个操作:在文档后插入字符串并输出,显然要用到追加拷贝函数strcat,如下:
if (input == 1){cin >> in;strcat(ch, in);cout << ch << endl;}
- 第二步,截取文档从第 a 个字符起 b 个字符输出,只需要在数组第a+b的位置赋为\0在运用拷贝函数操作即可,代码送上 体会一下:
else if (input == 2){int start;int end;scanf("%d %d", &start, &end);char in[110] = { 0 };ch[start + end] = '\0';strcat(in, &ch[start]);strcpy(ch, in);cout << ch << endl;}
因为在上一步操作中对in数组进行了输入,所以这里在使用in数组之前应该将in数组中的元素释放出来。
- 第三步,插入片段,在文档中第 a 个(有歧义,是数组下标)字符前面插入字符串,并输出文档的字符串。代码如下:
else if (input == 3){int cur;scanf("%d", &cur);cin >> in;strcat(in, &ch[cur]);ch[cur] = '\0';strcat(ch, in);printf("%s\n", ch);}
上图代码逻辑雀氏妙,大家仔细体会。
- 最后一步:查找子串,查找字符串 str 在文档中最先的位置并输出;如果找不到输出 -1。通过观察示例所知,若存在返回的是下标而不是内存地址(返回下标我们可以使用指针减指针的方式实现),显然这里需要用来strstr函数 。
else{cin >> in;char* ret=strstr(ch, in);printf("%d\n", ret != NULL ? (int)(ret-ch) : -1);}
这样用三目操作符 没想到吧?

下面完整代码奉上:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <iostream>using namespace std;char ch[110];
char in[110];int main()
{int count;cin >> count;cin >> ch;while (count--){int input;scanf("%d", &input);if (input == 1){cin >> in;strcat(ch, in);cout << ch << endl;}else if (input == 2){int start;int end;scanf("%d %d", &start, &end);char in[110] = { 0 };ch[start + end] = '\0';strcat(in, &ch[start]);strcpy(ch, in);cout << ch << endl;}else if (input == 3){int cur;scanf("%d", &cur);cin >> in;strcat(in, &ch[cur]);ch[cur] = '\0';strcat(ch, in);printf("%s\n", ch);}else{cin >> in;char* ret = strstr(ch, in);printf("%d\n", ret != NULL ? (int)(ret - ch) : -1);/*if (NULL == ret)cout << -1 << endl;elsecout << ret - ch << endl;*/}}return 0;
}
在源码中可以发现我注释了几处释放in数组的操作,其实我当时在疑惑多次对in数组输入,为什么不需要在下一次之前将in的元素释放掉。真相是 即使数组中保留着上一次输入的字符串 scanf再次输入时 会在字符串后自动补上\0保证上一次的元素无法影响输出(在不越界的情况下)
以上就是这次的全部内容。
相关文章:
【算法入门】字符串基础
目录 一.字符串引言1.字符串基础二.洛谷P5734详解1.字符串相关库函数💫(1) strcpy函数 💫💫(2) strcat函数 💫💫(3)strstr函数 💫2.题…...
前端面试题 —— 浏览器原理(二)
目录 一、有哪些可能引起前端安全的问题? 二、网络劫持有哪几种,如何防范? 三、浏览器渲染进程的线程有哪些 四、僵尸进程和孤儿进程是什么? 五、为什么需要浏览器缓存? 六、对浏览器的理解 七、CSS 如何阻塞文档解析&…...
对于植物神经紊乱的治疗 中医采用辩证论治的方法
植物神经紊乱是由于心理压力过大、长期生活不规律所导致的一种疾病,这种疾病的发生往往是症状多样、涉及广泛的。当患有植物神经紊乱之后,主要的症状会以躯体化障碍为常见症状,但是很多患者还会出现情绪失控、睡眠障碍等问题。 对于植物神经紊…...
chatGPT之Python API启用上下文管理
chatGPT已经爆火一段时间了,我想大多数的开发者都在默默的在开发和测试当中,可能也是因为这个原因所以现在很难找到关于开发中遇到的一些坑或者方法和技巧。为什么别人的机器人能联想之前的语料,而你的却像个每次都只如初见的高冷机器人&…...
油田钻井实时在线监测系统
油田钻井的井下油层的压力不断变化,环境深度和压力巨大,且井下原油具有一定的流动性,实时在线压力监测是石油开采行业的难点。为更好地了解油田开采过程中油层的状况,提高油田开采效率和产量,油田钻井实时在线监测系统…...
经典PID控制算法原理以及优化思路
文章目录0、概念1、理解2、实现3、优化4、引用0、概念 PID算法是工业应用中最广泛算法之一,在闭环系统的控制中,可自动对控制系统进行准确且迅速的校正。PID控制,即Proportional – Integral(I) – Derivative(D) Control, 实际上是三种反馈…...
经典面试题之赋值和深浅拷贝的区别
1.区别 **赋值:**基本数据直接拷贝,互不影响,引用数据把地址赋值给新对象,新旧对象指向同一个地址。 **浅拷贝: **基本类型之间互不影响,对象只会复制对象的第一层基本数据和引用类型的地址,对象内部嵌套的…...
电子取证的电脑配置有关问题,以我仅有的知识为大家建议一下。
电子取证火力很重要,用轻薄本是没法取证的,所以至少是全能本或者是游戏本,牛逼的选手上台式,参考浙警许专家,yyds我专家! 我从实战出发,参考历年“美亚杯”和“长安杯”比赛,给大家…...
【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证明(面试常问到)
文章目录前言环形链表环形链表 II写在最后前言 本章的OJ练习相对于OJ练习(4)较为简单。不过,本章的OJ最重要的是要我们证明为何可以这么做。这也是面试中常出现的。 对于OJ练习(4):-> 传送门 <-,分割链表以一种类似于归并的思想解得&a…...
MySQL 基础教程[13]
MySQL 基础教程[13]问题1问题1代码问题2问题2代码本系列MySQL 基础教程通过“问题-代码”的方式介绍各类方法,每篇设置2个MySQL综合问题,并给出解决方案。 问题1 kwgl数据库中有学生基本信息表student和系别表dept。表结构及说明如下: student (sid, s…...
个人练习-Leetcode-826. Most Profit Assigning Work
题目链接:https://leetcode.cn/problems/most-profit-assigning-work/ 题目大意:给出一串任务,difficulty表示任务难度,profit表示任务的收益(以下简称diff和pro)。给出一串工人的能力worker。每个工人只能…...
云原生周刊:边缘计算会吞噬云吗?| 2023.3.13
文章推荐 边缘计算吞噬云? 这篇文章讨论了边缘计算对传统云计算的潜在冲击。 边缘计算是一种新型的计算架构,它将计算移动到离数据源和终端设备更近的地方,从而提供更快的响应时间和更好的用户体验。相比之下,云计算是一种集中…...
python+django+vue图书个性化推荐系统
整个系统是由多个功能模块组合而成的,要将所有的功能模块都一一列举出来,然后进行逐个的功能设计,使得每一个模块都有相对应的功能设计,然后进行系统整体的设计。 本图书个性化推荐系统结构图如图python manage.py runserver 开…...
经典文献阅读之--LIO-PPF(增量平面预拟合LIO)
0. 简介 自从ikd-tree出来后,现在越来越多的工作瞄准了增量式这种方法,比如说激光惯导里程计(LIDAR-Inertial Odometry,LIO)的高精度跟踪通常涉及最小化点到平面距离的k最近邻(kNN)搜索&#x…...
ChatGPT背后有哪些关键技术?CSIG企业行带你一探究竟
目录1 ChatGPT的时代2 CSIG企业行3 议题&嘉宾介绍3.1 对生成式人工智能的思考3.2 对话式大型语言模型研究3.3 文档图像处理中的底层视觉技术4 观看入口1 ChatGPT的时代 2015年,马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始…...
C#基础之面向对象编程(二)
总目录 文章目录总目录前言一、概述1. 定义2. 面向对象的三大特性二、封装1. 定义2. 属性三、继承1. 定义2. 继承的使用3. base 和this四、多态1. 定义2. 重写和重载3. 多态性的实现1、静态多态性2、动态多态性4. 向上转型和向下转型1、定义2、语法格式3、案例结语前言 本文主…...
蓝桥杯刷题冲刺 | 倒计时25天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.完全二叉树1.完全二叉树 题目 链接: 完全二叉树的权值 - 蓝桥云课 (lanqiao.cn) 给…...
c语言—动态内存管理
一.为什么存在动态内存开辟开辟空间的特点:空间开辟大小是固定的数组在申明时,必须指定数组长度,她所需要的内存在编译时分配但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道ÿ…...
请说明Ajax、Fetch、Axios三者的区别
相同点: 1、三者都用于网络请求,但是不同维度 2、 Ajax(Asynchronous Javascript and XML),一种技术的统称,并不是实际的API 3、Fetch是一个具体的API,浏览器里面直接有一个API就叫Fetch 4、 Axios是一个第三方库&…...
阿里p8测试总监,让我们用这份《测试用例规范》,再也没加班过
经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 固然,编写一份好的测试用例需要:充分的需求分析能力 理论及经验加持,作为测试职场摸爬打滚的老人&…...
面试题:模型评价指标全解析——准确率、精确率、召回率、F1、ROC、AUC、MAE、MSE、RMSE、R² 一文讲透
把“分类指标怎么看、回归指标怎么选、ROC/AUC 怎么判断模型好坏”一次讲清楚很多人在面试里被问到“模型评价指标有哪些”时,第一反应往往是背一串名词:准确率、精确率、召回率、F1、AUC、MAE、MSE、R。看似都答到了,实际上却很容易被继续追…...
B站视频下载终极教程:3步获取无水印高清视频
B站视频下载终极教程:3步获取无水印高清视频 【免费下载链接】BiliDownload B站视频下载工具 项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload 想要下载B站视频却苦于找不到合适的工具?BiliDownload是你的最佳选择!这款基…...
QML WebEngine与ECharts联袂:打造高性能实时数据可视化桌面应用
1. 为什么选择QMLWebEngineECharts组合? 在开发桌面端实时数据可视化应用时,我们常常面临一个关键选择:是使用原生绘图方案还是Web技术栈?我经过多个工业监控项目的实战验证,发现QMLWebEngineECharts的组合堪称黄金搭…...
高版本MATLAB机器人工具箱plot/teach视图兼容性修复实战
1. 问题现象与背景分析 最近在MATLAB 2019b上使用机器人工具箱(Robotics Toolbox)时遇到了一个奇怪的问题。当我像往常一样调用robot.plot()或者robot.teach()函数时,控制台突然报错:"索引超出数组元素数目(4)"。这个错…...
智能网联时代的分心驾驶:技术悖论、工程困境与系统化安全框架
1. 项目概述:一个被忽视的致命悖论 作为一名在汽车电子和智能网联领域摸爬滚打了十几年的工程师,我见过太多关于“未来出行”的炫酷概念和激动人心的技术路线图。从早期的车载信息娱乐系统,到后来的高级驾驶辅助系统,再到如今如火…...
Navicat重置终极指南:macOS数据库管理工具无限试用方案
Navicat重置终极指南:macOS数据库管理工具无限试用方案 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你是否在为…...
121.YOLOv8从零到一实战,猫犬检测全流程,代码带注释,零基础也能学会
摘要 YOLO(You Only Look Once)是当前工业界和学术界最主流的目标检测算法之一,其核心优势在于将目标检测任务转化为单次回归问题,实现端到端的实时检测。本文从零基础出发,系统讲解YOLO的核心原理、模型架构演进,并基于Ultralytics框架提供完整的可运行代码案例,涵盖数…...
上午题_结构化开发
耦合基础知识...
企业/学校如何自建在线“慕课“教学平台?Moodle 开源 LMS 初识与部署全攻略
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 背景说明 出于内部学习平台搭建需要,领导吩咐我去探究部署一些开源学习平台,要求支持Office协同文档、学习课程发布、学习记录反馈和支持 OAuth2 客户端以对…...
SITS2026正式生效倒计时47天:你的AIAgent容错设计还停留在“try-catch”阶段?
更多请点击: https://intelliparadigm.com 第一章:SITS2026标准核心要义与AIAgent容错设计范式跃迁 SITS2026(Software Intelligence Trust & Safety Standard 2026)首次将“可验证容错边界”(Verifiable Fault T…...
