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

字符函数和字符串函数(上)-C语言详解

CSDN的各位友友们你们好,今天千泽为大家带来的是C语言中字符函数和字符串函数的详解,掌握了这些内容能够让我们更加灵活的运用字符串,
接下来让我们一起走进今天的内容吧!
写这篇文章需要在cplusplus.com上大量截图,十分不易!
如果对您有帮助的话希望能够得到您的支持和帮助,我会持续更新的!

0.前言

C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在

常量字符串中或者字符数组

字符串常量适用于那些对它不做修改的字符串函数.

首先,我们将本次要介绍的函数分一下类

长度不受限制的字符串函数

strcpy

strcat

strcmp

长度受限制的字符串函数介绍

strncpy

strncat

strncmp

1.函数介绍

🚀strcpy

例子

/* strcpy example */
#include <stdio.h>
#include <string.h>int main ()
{char str1[]="Sample string";char str2[40];char str3[40];strcpy (str2,str1);strcpy (str3,"copy successful");printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);return 0;
}

输出:

str1: Sample string
str2: Sample string
str3: copy successful

🚩模拟实现strcpy

#include<stdio.h>
#include<string.h>
//1.参数顺序
//2.函数的功能,停止条件
//3.assert
//4.const修饰指针
//5.函数返回值
//6.题目出自《高质量C/C++编程》书籍最后的试题部分
//返回的是目标空间的起始地址
#include<assert.h>
char * my_strcpy(char * dest, const char* src)
{char * ret = dest;assert(dest!=NULL);assert(src != NULL);while ((*dest++ = *src++)){;}return ret;
}
int main()
{char arr1[] = "hehe";char arr2[20] = { 0 };my_strcpy(arr2, arr1);printf("%s\n", arr2);return 0;
}

友友们记得动手实践!!!

🚀strcat

官方例子

/* strcat example */
#include <stdio.h>
#include <string.h>int main ()
{char str[80];strcpy (str,"these ");strcat (str,"strings ");strcat (str,"are ");strcat (str,"concatenated.");puts (str);return 0;
}

输出

these strings are concatenated.

🚩模拟实现strcat

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{char* ret = dest;assert(dest != NULL);assert(src != NULL);//找目标空间的\0while (*dest!='\0'){dest++;}//拷贝while ((*dest++ = *src++)){;}return ret;
}
int main()
{char arr1[20] = "hello ";char arr2[] = "world";//追加my_strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}
🚀strcmp

官方例子

#include <stdio.h>
#include <string.h>int main ()
{char key[] = "apple";char buffer[80];do {printf ("Guess my favorite fruit? ");fflush (stdout);scanf ("%79s",buffer);} while (strcmp (key,buffer) != 0);puts ("Correct answer!");return 0;
}

输出

Guess my favourite fruit? orange
Guess my favourite fruit? apple
Correct answer!

🚩模拟实现strcmp

#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{assert(str1 != NULL);assert(str2 != NULL);while (*str1 == *str2){if (*str1 == '\0'){return 0;}str1++;str2++;}if (*str1 > *str2){return 1;}else{return -1;}
}int main()
{char arr1[] = "abcdef";char arr2[] = "bbcdef";int ret = my_strcmp(arr1, arr2);printf("%d\n", ret);return 0;
}

🚀strncpy

官方例子

/* strncpy example */
#include <stdio.h>
#include <string.h>int main ()
{char str1[]= "To be or not to be";char str2[40];char str3[40];/* copy to sized buffer (overflow safe): */strncpy ( str2, str1, sizeof(str2) );/* partial copy (only 5 chars): */strncpy ( str3, str2, 5 );str3[5] = '\0';   /* null character manually added */puts (str1);puts (str2);puts (str3);return 0;
}

输出

To be or not to be To be or not to be To be

🚩模拟实现strncpy

#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[] = "abcdef";char arr2[5] = { 0 };strncpy(arr2, arr1, 3);printf("%s\n", arr2);return 0;
}
🚀strncat

官方例子

/* strncat example */
#include <stdio.h>
#include <string.h>int main ()
{char str1[20];char str2[20];strcpy (str1,"To be ");strcpy (str2,"or not to be");strncat (str1, str2, 6);puts (str1);return 0;
}

输出

To be or not

🚩模拟实现strncat

#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[20] = "hello \0xxxxxxxx";char arr2[] = "world";strncat(arr1, arr2, 3);printf("%s\n", arr1);return 0;
}

🚀strncmp

官方例子

/* strncmp example */
#include <stdio.h>
#include <string.h>int main ()
{char str[][5] = { "R2D2" , "C3PO" , "R2A6" };int n;puts ("Looking for R2 astromech droids...");for (n=0 ; n<3 ; n++)if (strncmp (str[n],"R2xx",2) == 0){printf ("found %s\n",str[n]);}return 0;
}

输出

Looking for R2 astromech droids... found R2D2 found R2A6

🚩模拟实现strncmp

#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[] = "abcdef";char arr2[] = "abcq";int ret = strncmp(arr1, arr2, 4);printf("%d\n", ret);return 0;
}

好了,今天的分享暂时告一段落,预知后续请看下篇😁,祝大家学习进步!

相关文章:

字符函数和字符串函数(上)-C语言详解

CSDN的各位友友们你们好,今天千泽为大家带来的是C语言中字符函数和字符串函数的详解,掌握了这些内容能够让我们更加灵活的运用字符串,接下来让我们一起走进今天的内容吧!写这篇文章需要在cplusplus.com上大量截图,十分不易!如果对您有帮助的话希望能够得到您的支持和帮助,我会持…...

全连接神经网络

目录 1.全连接神经网络简介 2.MLP分类模型 2.1 数据准备与探索 2.2 搭建网络并可视化 2.3 使用未预处理的数据训练模型 2.4 使用预处理后的数据进行模型训练 3. MLP回归模型 3.1 数据准备 3.2 搭建回归预测网络 1.全连接神经网络简介 全连接神经网络(Multi-Layer Percep…...

深度学习目标检测ui界面-交通标志检测识别

深度学习目标检测ui界面-交通标志检测识别 为了将算法封装起来&#xff0c;博主尝试了实验pyqt5的上位机界面进行封装&#xff0c;其中遇到了一些坑举给大家避开。这里加载的训练模型参考之前写的博客&#xff1a; 自动驾驶目标检测项目实战(一)—基于深度学习框架yolov的交通…...

ubuntu不同版本的源(换源)(镜像源)(lsb_release -c命令,显示当前系统的发行版代号(Codename))

文章目录查看unbuntu版本名&#xff08;lsb_release -c命令&#xff09;各个版本源代号&#xff08;仅供参考&#xff0c;具体代号用上面命令查&#xff09;各版本软件源Ubuntu20.10阿里源&#xff1a;清华源&#xff1a;Ubuntu20.04阿里源&#xff1a;清华源&#xff1a;Ubunt…...

linux入门---程序翻译的过程

我们在vs编译器中写的代码按下ctrl f5就可以直接运行起来&#xff0c;并且会将运行的结果显示到显示器上&#xff0c;这里看上去只有一个步骤但实际上这里会存在很多的细节&#xff0c;比如说生成结果在这里插入代码片之前我们的代码会经过预处理&#xff0c;编译&#xff0c;汇…...

springboot复习(黑马)

学习目标基于SpringBoot框架的程序开发步骤熟练使用SpringBoot配置信息修改服务器配置基于SpringBoot的完成SSM整合项目开发一、SpringBoot简介1. 入门案例问题导入SpringMVC的HelloWord程序大家还记得吗&#xff1f;SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计…...

C++指针详解

旧文更新&#xff1a;两三年的旧文了&#xff0c;一直放在电脑里&#xff0c;现在直接传上CSDN 一、指针的概念 1.1 指针 程序运行时每个变量都会有一块内存空间&#xff0c;变量的值就存放在这块空间中。程序可以通过变量名直接访问这块空间内的数据&#xff0c;这种访问方…...

tauri+vite+vue3开发环境下创建、启动运行和打包发布

目录 1.创建项目 2.安装依赖 3.启动项目 4.打包生成windows安装包 5.安装打包生成的安装包 1.创建项目 运行下面命令创建一个tauri项目 pnpm create tauri-app 我创建该项目时的node版本为16.15.0 兼容性注意 Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#x…...

安卓进阶系列-系统基础

文章目录计算机结构冯诺依曼结构哈弗结构冯诺依曼结构与哈弗结构对比安卓采用的架构安卓操作系统进程间通讯&#xff08;IPC&#xff09;内存共享linux内存共享安卓内存共享管道Unix Domain Socket同步常见同步机制信号量Mutex管程安卓同步机制安卓中的Mutex安卓中的ConditionB…...

10 Wifi网络的封装

概述 Wifi有多种工作模式,比如:STA模式、AccessPoint模式、Monitor模式、Ad-hoc模式、Mesh模式等。但在IPC设备上,主要使用STA和AccessPoint这两种模式。下面分别进行介绍。 STA模式:任何一种无线网卡都可以运行在此模式,这种模式也是无线网卡的默认模式。在此模式下,无线…...

手把手的教你安装PyCharm --Pycharm安装详细教程(一)(非常详细,非常实用)

简介 Jetbrains家族和Pycharm版本划分&#xff1a; pycharm是Jetbrains家族中的一个明星产品&#xff0c;Jetbrains开发了许多好用的编辑器&#xff0c;包括Java编辑器&#xff08;IntelliJ IDEA&#xff09;、JavaScript编辑器&#xff08;WebStorm&#xff09;、PHP编辑器&…...

开发板与ubantu文件传送

接下来的所以实验都通过下面这种方式发送APP文件到开发板运行 目录 1、在ubantu配置 ①在虚拟机上添加一个桥接模式的虚拟网卡 ②设定网卡 ③在网卡上配置静态地址 2、开发板设置 ①查看网卡 ②配置网卡静态ip 3、 测试 ①ping ②文件传送 传送报错情况 配置环境&#…...

如何成为一名优秀的网络安全工程师?

前言 这是我的建议如何成为网络安全工程师&#xff0c;你应该按照下面顺序学习。 简要说明 第一件事你应该学习如何编程&#xff0c;我建议首先学python&#xff0c;然后是java。 &#xff08;非必须&#xff09;接下来学习一些算法和数据结构是很有帮助的&#xff0c;它将…...

面试问题之高并发内存池项目

项目部分 1.这个项目是什么? 高并发内存池的原型是谷歌一个开源项目&#xff0c;tcmalloc&#xff0c;而这个项目&#xff0c;就是tcmalloc中最核心的框架和部分拿出来进行模拟。他的作用就是在去代替原型的内存分配函数malloc和free。这个项目涉及的技术有&#xff0c;c&…...

如果阿里巴巴给蒋凡“百亿补贴”

出品 | 何玺 排版 | 叶媛 2021底&#xff0c;阿里内部进行组织架构大调整&#xff0c;任命蒋凡为阿里海外商业负责人&#xff0c;分管全球速卖通和国际贸易&#xff08;ICBU&#xff09;两个海外业务&#xff0c;以及Lazada等面向海外市场的多家子公司。 一年时间过去&#x…...

Linux版本现状

Linux的发行版本可以大体分为两类&#xff0c;一类是商业公司维护的发行版本&#xff0c;一类是社区组织维护的发行版本&#xff0c;前者以著名的Red Hat&#xff08;RHEL红帽&#xff09;为代表&#xff0c;后者以Debian为代表。Red HatRedhat&#xff0c;应该称为Redhat系列&…...

Winform中实现保存配置到文件/项目启动时从文件中读取配置(序列化与反序列化对象)

场景 Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象&#xff1a; Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象_winform xml序列化_霸道流氓气质的博客-CSDN博客 上面讲的序…...

基于python的超市历年数据可视化分析

人生苦短 我用python Python其他实用资料:点击此处跳转文末名片获取 数据可视化分析目录人生苦短 我用python一、数据描述1、数据概览二、数据预处理0、导入包和数据1、列名重命名2、提取数据中时间&#xff0c;方便后续分析绘图三、数据可视化1、美国各个地区销售额的分布&…...

GPT-4技术报告

摘要 链接&#xff1a;https://cdn.openai.com/papers/gpt-4.pdf 我们汇报了GPT-4的发展&#xff0c;这是一个大规模的多模态模型&#xff0c;可以接受图像和文本输入并产生文本输出。虽然在许多现实场景中&#xff0c;GPT-4的能力不如人类&#xff0c;但它在各种专业和学术基…...

前端性能优化

总结 使用打包工具对代码进行打包压缩&#xff1b;引入css时采用link标签&#xff0c;并放入头部&#xff0c;使其与文档一起加载&#xff0c;减少页面卡顿时间&#xff1b;尽量减少dom结构的重排和重绘&#xff1b;使用css雪碧图&#xff0c;减少网络请求&#xff1b;对不同分…...

【2026年阿里巴巴春招- 3月25日-算法岗-第一题- 三星数字】(题目+思路+JavaC++Python解析+在线测试)

题目内容 给定一个整数 n n n ,请你找到两个不同的正整数 x , y x,y x,y,满足...

MiniCPM-V-2_6在Android应用开发中的实战:移动端AI集成指南

MiniCPM-V-2_6在Android应用开发中的实战&#xff1a;移动端AI集成指南 最近在捣鼓一个智能相册应用&#xff0c;想让它能自动识别照片里的内容&#xff0c;比如是猫是狗、是风景还是美食&#xff0c;然后智能分类。一开始想用云端的AI服务&#xff0c;但转念一想&#xff0c;…...

Gin 日志体系详解

Gin 日志体系详解 本文基于 Gin 企业开发的真实场景&#xff0c;从原生日志能力到主流日志工具选型&#xff0c;全程以实用为核心&#xff0c;附带可直接复制的集成代码、最佳实践和踩坑指南&#xff0c;解决 Gin 开发中日志的全场景需求。 一、Gin 原生日志体系详解 Gin 自带了…...

如何用Rufus制作万能启动盘:从新手到专家的完整指南

如何用Rufus制作万能启动盘&#xff1a;从新手到专家的完整指南 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus Rufus是一款专业且可靠的USB格式化工具&#xff0c;专为制作启动盘而生。无论是Wi…...

基于cosyvoice 2声码器的实时语音合成实战:从选型到生产环境部署

最近在做一个需要实时语音合成的项目&#xff0c;对延迟和音质要求都比较高。调研了一圈声码器&#xff0c;最终选择了cosyvoice 2&#xff0c;并在生产环境成功落地。整个过程踩了不少坑&#xff0c;也积累了一些经验&#xff0c;今天就来分享一下从技术选型到生产部署的完整实…...

python之with和try

with 和 try 都是 Python 中用于处理“可能会出问题”的场景的关键字&#xff0c;但它们的核心目标和应用方式有所不同。下面这个表格能帮你快速把握它们的核心区别和联系&#xff1a;特性with语句try语句核心目标资源管理&#xff0c;确保资源使用后被正确释放异常处理&#x…...

从外包到阿里P8:我的“野路子”晋升攻略

一、起点&#xff1a;外包测试员的困境与觉醒初入职场时&#xff0c;我是一名普通的外包功能测试员&#xff0c;每日重复着“点点点”的基础工作。外包身份的局限性逐渐显现&#xff1a;接触不到核心业务逻辑&#xff0c;缺乏技术成长空间&#xff0c;职业路径模糊。一次线上重…...

一站式LLM应用宝库:从新手到专家的AI应用开发指南

一站式LLM应用宝库&#xff1a;从新手到专家的AI应用开发指南 【免费下载链接】awesome-llm-apps Collection of awesome LLM apps with RAG using OpenAI, Anthropic, Gemini and opensource models. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-llm-apps …...

工具链设计进阶:RAG-MCP混合架构与海量工具智能选择

工具链设计进阶&#xff1a;RAG-MCP混合架构与海量工具智能选择 写在前面&#xff1a;当你的MCP生态从几个工具扩展到几十甚至上百个工具时&#xff0c;一个严峻的问题浮现了——LLM在选择工具时开始"迷失"。传统方式把所有工具描述都塞进Prompt的做法&#xff0c;在…...

如何快速上手ESP-ADF:从零开始构建智能音频项目

如何快速上手ESP-ADF&#xff1a;从零开始构建智能音频项目 【免费下载链接】esp-adf Espressif Audio Development Framework 项目地址: https://gitcode.com/gh_mirrors/es/esp-adf ESP-ADF&#xff08;Espressif Audio Development Framework&#xff09;是乐鑫为ESP…...