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

C语言-字符串操作函数-附加使用方式

文章目录

  • 前言
    • 字符串复制-strcpy
    • 字符串复制(按照位数)-strncpy
    • 字符串比较-strcmp
    • 字符串比较(按照位数)-strncmp
    • 不区分大小写的字符串比较-strcasecmp
    • 不区分大小写的比较(前n位)-strncasecmp
    • 字符串按照格式写入-sprintf
    • 字符串按照格式和个数写入-snprintf
    • 字符串拼接-strcat
    • 字符串拼接(前n位)-strncat
    • 字符串切割-strtok
    • 字符串切割-strsep
    • 查找字符串是否在另一个字符串中-strstr
    • 查找字符串是否在另一个字符串中-不区分大小写-strcasestr
    • 查找某个字符是否在字符串中-strchr
    • 字符串转数字-atoi
    • 在字符串提取前面的数字字符并转换成数字(根据参数选择转换后的数字类型)-strtoul
    • 判断字符是否为空-isspace
    • 检查字符是否是十进制数字字符-isdigit

前言

当前文档为C语言字符串的基本操作(用过的以及man时发现的),用于本人记录使用,会持续更新

字符串复制-strcpy

#include <string.h>
char *strcpy(char *dest, const char *src);// 将后面的变量赋值给前面
// 函数返回一个指向目标字符串dest的指针。
// 需要注意前面变量的长度,要大于等于 后面的长度,要不然编译报警告,还容易越界后报错

字符串复制(按照位数)-strncpy

#include <string.h>
char *strncpy(char *dest, const char *src, size_t n);// 将后面的字符串赋值给前面的字符串 复制 n 个
// 函数返回一个指向目标字符串dest的指针。

字符串比较-strcmp

#include <string.h>
int strcmp(const char *s1, const char *s2);// 字符串比较,完整比较
// 比较方式为 按照字符串每个字符的ASCII码按位比较,不相同时,前面的大 返回 大的数,后面的大,返回负的少的个数

字符串比较(按照位数)-strncmp

#include <string.h>
int strncmp(const char *s1, const char *s2, size_t n);// 前后字符串比较,比较前n位,比较方式同上

不区分大小写的字符串比较-strcasecmp

#include <strings.h>
int strcasecmp(const char *s1, const char *s2);// 不区分大小写的比较,比较方式同上

不区分大小写的比较(前n位)-strncasecmp

#include <strings.h>
int strncasecmp(const char *s1, const char *s2, size_t n);// 不区分大小写的比较,比较前n位,比较方式同上

字符串按照格式写入-sprintf

#include <stdio.h>
int sprintf(char *str, const char *format, ...);// 按照 中间的格式,将后面的变量 写入到 前面的字符串中
char buf[128] = {0};
if(sprintf(buf,"%s: %d\n","name",18) > 0){//成功 返回 写入的字符数
}else{//失败返回 负数
}

字符串按照格式和个数写入-snprintf

#include <stdio.h>
int snprintf(char *str, size_t size, const char *format, ...);// 按照中间格式,将后面的变量们,写入到第一个变量中,写入 size个
// 注意: size为最大限制个数,实际写入最大个数为 size - 1 个,最后一位会被 写入 '\0'
char buf[128] = {0};
if(snprintf(buf,32,"%s: %d\n","name",18) > 0){	//按照 %s: %d 格式将 name 跟 18 写入到 buf中,最多写入 32个//成功 返回 写入的字符数
}else{//失败返回 负数
}

字符串拼接-strcat

#include <string.h>
char *strcat(char *dest, const char *src);// 将src字符串 拼接到 dest 字符串中,替换dest的'\0'。需要注意dest字符串足够大。

字符串拼接(前n位)-strncat

#include <string.h>
char *strncat(char *dest, const char *src, size_t n);// 将src字符串中的前n位 拼接到 dest 字符串中,替换dest的'\0'。需要注意dest字符串足够大。

字符串切割-strtok

#include <string.h>
char *strtok(char *str, const char *delim);// 字符串切割,将str 按照 delim 样式切割。将切割完的字符串的指针返回
// 第二次切割时,str 写为 NULLint main(int argc, char const *argv[])
{char buf[128] = "this_is_test:name:qxy:age:200";char *temp = NULL;temp = strtok(buf,":");while(temp != NULL){printf("__<%s>\n",temp);temp = strtok(NULL,":");}return 0;
}

执行结果

字符串切割-strsep

#include <string.h>
char *strsep(char **stringp, const char *delim);// 字符串切割:将stringp 字符串 按照 字符 delim 进行切割
// 切割完 前面的部分 通过返回值返回,剩余部分 保存在 stringp 字符串中int main()
{char query[] ="this_is_test:name:qxy:age:200";char *q, *temp_q;q = query;printf("old_str is <%s>\n",query);temp_q = strsep(&q,":"); printf("[temp_q ] :<%s>\n", temp_q); //但是printf("[q] :<%s>\n", q);temp_q = strsep(&q,":"); printf("[2temp_q ] :<%s>\n", temp_q);printf("[2q] :<%s>\n", q);temp_q = strsep(&q,":");printf("[3temp_q ] :<%s>\n", temp_q);printf("[3q] :<%s>\n", q);return 0;
}

在这里插入图片描述

查找字符串是否在另一个字符串中-strstr

#include <string.h>
char *strstr(const char *haystack, const char *needle);// 字符串查找,查找后面的字符串 是否在 前面的字符串中
// 没找到返回 NULL
// 找到,返回查找字符串的在haystack字符串的第一位指针

查找字符串是否在另一个字符串中-不区分大小写-strcasestr

#include <string.h>
char *strcasestr(const char *haystack, const char *needle);// 查找后面字符串 是否在 前面字符串中,不区分大小的的查找
// 没找到返回 NULL
// 找到,返回查找字符串的在haystack字符串的第一位指针

查找某个字符是否在字符串中-strchr

#include <string.h>
char *strchr(const char *s, int c);// 函数返回一个指针,指向前面字符串中 最后一次出现的字符c 的位置
// 没找到返回 NULL

字符串转数字-atoi

#include <stdlib.h>
int ret = atoi(const char* buf);// 出错返回 0

在字符串提取前面的数字字符并转换成数字(根据参数选择转换后的数字类型)-strtoul

#include <stdlib.h>
int main(int argc, char const *argv[])
{char buf[128] = "         25036 HELLO_WORLD QXY";//char buf[128] = "        HELLO_WORLD QXY 2525252";    //这个不行.....printf("buf is <%s>\n",buf);char *temp = NULL;unsigned long int x = strtoul(buf,&temp,10);printf("x = <%lu>\n",x);printf("temp = <%s>\n",temp);printf("buf = <%s>\n",buf);return 0;
}

strtoul

unsigned long strtoul(const char nptr, char **endptr, int base);
strtoul()函数根据给定的基数将nptr中字符串的初始部分转换为无符号长值,该值必须为介于2和36之间(包括2和36)或者是特殊值0。
基本上就是 0 2 8 10 16 (如果是 0 字符串以0x开头就是16进制读取,以0开头 就是8进制,否则一律按十进制处理)
给定基数中的数字。(在10以上的base中,大写或小写字母“A”表示10,“B”表示11,依此类推 “Z”表示35。)
字符串可以以任意数量的空格 tab 开头,后跟一个可选的“+”或“-”号。
字符串的剩余部分以显而易见的方式转换为无符号长值,在第一个无效字符处停止
如果endptr不为NULL,strtoul()将第一个无效字符的地址存储在
endptr中。如果根本没有数字,strtoul()将存储endptr中nptr的原始值(并返回0)。特别是,如果返回时nptr不是“\0”,但**endptr是“\0”时,则整个字符串为有效的

strtoull()函数的工作原理与strtoul()函数类似,但返回一个无符号长-长值。

判断字符是否为空-isspace

’ ’ (0x20) space (SPC) 空格符
‘\t’ (0x09) horizontal tab (TAB) 水平制表符
‘\n’ (0x0a) newline (LF) 换行符
‘\v’ (0x0b) vertical tab (VT) 垂直制表符
‘\f’ (0x0c) feed (FF) 换页符
‘\r’ (0x0d) carriage return (CR) 回车符

#inlcude <ctype.h>
int ret = isspace(char c);//为空返回非0,不为空返回 0

检查字符是否是十进制数字字符-isdigit

#inlcude <ctype.h>
int ret = isdigit(char c);//是一个数字,则该函数返回非零值,否则返回 0。

相关文章:

C语言-字符串操作函数-附加使用方式

文章目录 前言字符串复制-strcpy字符串复制&#xff08;按照位数&#xff09;-strncpy字符串比较-strcmp字符串比较(按照位数)-strncmp不区分大小写的字符串比较-strcasecmp不区分大小写的比较(前n位)-strncasecmp字符串按照格式写入-sprintf字符串按照格式和个数写入-snprintf…...

06-React组件 Redux React-Redux

React组件化&#xff08;以Ant-Design为例&#xff09; 组件化编程&#xff0c;只需要去安装好对应的组件&#xff0c;然后通过各式各样的组件引入&#xff0c;实现快速开发 我们这里学习的是 Ant-design &#xff08;应该是这样&#xff09;&#xff0c;它有很多的组件供我们…...

Windows安装卸载MySQL

【官方】MySQL参考手册&#xff1a;介绍MySQL Server、SQL、InnoDB存储引擎、复制等。 Windows 卸载 MySQL 删除程序 【win x】 > p &#xff0c;在安装的程序中卸载MySQL相关删除安装目录和数据文件夹 D:\ProgramFiles\MySQL C:\ProgramData\MySQL删除服务 【win r】 &…...

element-ui 重置resetFields()不生效

element-ui 重置resetFields()不生效 初始化数据 data() {return {dialogVisible: false,form: {name: ,age: ,sex: ,birth: ,addr: }}}弹窗关闭重置数据 handleClose() {// 弹窗关闭的时候清除数据this.$refs.form.resetFields()this.dialogVisible false }以上操作this.$…...

JVM学习笔记-如何在IDEA打印JVM的GC日志信息

若要在Idea上打印JVM相应GC日志&#xff0c;其实只需在Run/Debug Configurations上进行设置即可。 拿《深入Java虚拟机》书中的3-7代码例子来演示&#xff0c;如 1 public class JvmTest {2 private static final int _1MB1024*1024;3 public static void main(String…...

16ASM 汇编基础与Debug使用

目录 硬件运行机制 微机系统硬件组成 计算机系统组成 8086CPU组织结构 DoxBox安装 Debug使用 R命令 D命令 E命令 U命令 T命令 A命令 标志寄存器 常用机器指令 硬件运行机制 下面是一个电子器件二极管&#xff0c;正向加电则通&#xff0c;反向加电则不通 利用二…...

基于Java车辆管理系统(如高校、办公园区)

基于Java车辆管理系统&#xff08;如高校、办公园区&#xff09; 功能需求 1、车辆进出管理&#xff1a;对进出校园和园区的车辆进行登记、授权和监管&#xff0c;确保车辆进出安全&#xff0c;特别是对于贵重车辆或特殊车辆&#xff0c;可以进行特别监控。 2、停车管理&…...

Dubbo v Spring Cloud:两大技术栈如何选型?

提到微服务开源框架&#xff0c;不可不说的是 Dubbo 和 Spring Cloud&#xff0c;这两大框架应该是大家最熟悉的微服务解决方案&#xff0c;也是面试中的热点。本文就梳理下 Dubbo 和 Spring Cloud 的应用特性&#xff0c;以及两个组件的功能对比。 Dubbo 应用 Dubbo 是阿里开…...

ubuntu上搭建bazel编译环境,构建Android APP

背景是github上下载的工程&#xff0c;说明仅支持bazel编译&#xff0c;折腾了一天Android studio&#xff0c;失败。 不得不尝试单价bazel编译环境&#xff0c;并不复杂&#xff0c;过程记录如下 说明&#xff1a;ubuntu环境是20.04&#xff0c;pve虚拟机安装 1.安装jdk sudo…...

(第38天)RAC 修改 IP 信息

介绍 在生产中有时候会遇到机房搬迁网络变更、系统上线由测试环境切换为生产环境、系统层面双网卡绑定或者解绑等情况。Oracle RAC 环境下应该如何操作?首先,我们都知道 Oracle RAC 中的 IP 主要有:Public IP、Virtual IP、SCAN IP、Private IP 这几种,接下来分别讲解这几…...

利用法线贴图渲染逼真的3D老虎模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…...

『 MySQL数据库 』聚合统计

文章目录 前言 &#x1f951;&#x1f95d; 聚合函数&#x1f353; COUNT( ) 查询数据数量&#x1f353; SUM( ) 查询数据总和&#x1f353; AVG( ) 查询数据平均值&#x1f353; MAX( ) 查询数据最大值&#x1f353; MIN( ) 查询数据最小值 &#x1f95d; 数据分组GROUP BY子句…...

Redis - 事务隔离机制

Redis 的事务的本质是 一组命令的批处理 。这组命令在执行过程中会被顺序地、一次性 全部执行完毕&#xff0c;只要没有出现语法错误&#xff0c;这组命令在执行期间是不会被中断。 当事务中的命令出现语法错误时&#xff0c;整个事务在 exec 执行时会被取消。 如果事务中的…...

android项目实战之编辑器图片上传预览

现状分析 项目的需求用到编辑器&#xff0c;编辑器中又可能用到图片上传功能。 实现方案 1. 增加依赖库&#xff0c;可以参考前面的几篇文章&#xff0c;都有描述。 2. 核心代码实现 PictureSelector.create(GoodItemContentFragment.this) .openGallery(SelectMimeType.…...

微信小程序:上传图片到别的域名文件下

效果 wxml <!-- 上传照片 --> <view class"addbtn"><view classpic name"fault_photo" wx:for"{{imgs}}" wx:for-item"item" wx:key"*this"><image classweui-uploader_img src"{{item}}"…...

Linux----内核及发行版

1. Linux内核 Linux内核是操作系统内部操作和控制硬件设备的核心程序&#xff0c;它是由芬兰人林纳斯开发的。 内核效果图: 说明: 真正操作和控制硬件是由内核来完成的&#xff0c;操作系统是基于内核开发出来的。 2. Linux发行版 是Linux内核与各种常用软件的组合产品&am…...

设备制造行业CRM:提升客户满意度,驱动业务增长

设备制造行业客户需求多样化、服务链路长&#xff0c;企业在关注APS、EMS等工业软件之余还要以客户为中心&#xff0c;做好客户服务。设备制造行业CRM管理系统是企业管理客户关系的利器&#xff0c;设备制造行业CRM的作用有哪些&#xff1f;一文带您看懂。 设备制造行业需要解…...

JavaScript实现复制功能函数

function copyUrl() {var copyText document.getElementById("url");copyText.select();document.execCommand("copy"); }其中&#xff0c;copyUrl()函数用于复制&#xff0c;document.getElementById(“url”)用于获取链接的DOM元素&#xff0c;select()…...

JVM垃圾收集器

主要垃圾收集器如下&#xff0c;图中标出了它们的工作区域、垃圾收集算法&#xff0c;以及配合关系。 HotSpot虚拟机垃圾收集器 这些收集器里&#xff0c;面试的重点是两个——CMS和G1。 Serial 收集器 Serial&#xff08;串行&#xff09;收集器是最基本、历史最悠久的垃圾…...

LeetCode(58)随机链表的复制【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 随机链表的复制 1.题目 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节…...

ESP32-C3深度睡眠唤醒踩坑记:GPIO0~5始终低电平?手把手教你用Arduino框架正确配置RTC GPIO

ESP32-C3深度睡眠唤醒实战指南&#xff1a;破解GPIO0~5低电平陷阱 凌晨三点的调试灯依然亮着&#xff0c;这是我本周第三次被ESP32-C3的深度睡眠唤醒问题折磨到深夜。作为一款主打低功耗的物联网芯片&#xff0c;ESP32-C3的深度睡眠模式本该是电池供电设备的福音&#xff0c;但…...

JetBrains IDE试用期重置终极指南:如何永久免费使用专业开发工具

JetBrains IDE试用期重置终极指南&#xff1a;如何永久免费使用专业开发工具 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE试用期到期而烦恼吗&#xff1f;每次30天试用结束后&#xff0c;那…...

Typora LaTeX主题:学术论文写作的终极解决方案

Typora LaTeX主题&#xff1a;学术论文写作的终极解决方案 【免费下载链接】typora-latex-theme 将Typora伪装成LaTeX的中文样式主题&#xff0c;本科生轻量级课程论文撰写的好帮手。This is a theme disguising Typora into Chinese LaTeX style. 项目地址: https://gitcode…...

自适应滤波器提取胎儿心电信号的MATLAB及FPGA实现

自适应滤波器提取胎儿心电信号的MATLAB及FPGA实现 【下载地址】自适应滤波器提取胎儿心电信号的MATLAB及FPGA实现 本项目提供了一个完整的工程代码&#xff0c;用于实现自适应滤波器提取胎儿心电信号的MATLAB及FPGA实现。自适应滤波器是一种能够根据环境变化自动调整滤波器参数…...

别再只用BLAST了!试试MAFFT+HMMER这套组合拳,挖掘基因家族新成员更精准

基因家族分析进阶指南&#xff1a;MAFFT与HMMER的高效组合策略 在基因组学研究领域&#xff0c;识别基因家族成员是一项基础而关键的工作。传统方法如BLAST虽然广为人知&#xff0c;但在面对远缘同源基因或高度分化的基因家族时&#xff0c;其灵敏度往往不尽如人意。这时&#…...

告别卡顿!用WebRTC-Streamer在浏览器里丝滑播放海康/大华监控(附完整代码)

告别卡顿&#xff01;用WebRTC-Streamer在浏览器里丝滑播放海康/大华监控&#xff08;附完整代码&#xff09; 监控视频的实时查看一直是许多开发者和运维人员头疼的问题。传统的解决方案如Flash早已被淘汰&#xff0c;而基于FLV.js的方案又常常面临延迟高、卡顿、标签页切换暂…...

MicMute:3秒掌握麦克风静音控制,告别会议尴尬时刻

MicMute&#xff1a;3秒掌握麦克风静音控制&#xff0c;告别会议尴尬时刻 【免费下载链接】MicMute Mute default mic clicking tray icon or shortcut 项目地址: https://gitcode.com/gh_mirrors/mi/MicMute 你是否曾在视频会议中因忘记静音而暴露尴尬的聊天背景声&…...

昇思大模型垂域模型

昇思 MindSpore 垂域模型是基于通用大模型基座 行业数据微调 领域技术增强构建的行业专用 AI 模型&#xff0c;依托 MindSpore Transformers 套件与昇腾硬件&#xff0c;在医疗、金融、电力、法律、工业等领域实现深度落地&#xff0c;兼顾通用能力与行业专业性&#xff0c;训…...

保姆级教程:手把手教你用Amlogic刷机工具给中兴B863AV3.2T盒子刷当贝桌面(附短接神器使用心得)

中兴B863AV3.2T盒子刷机全流程实战指南&#xff1a;从拆机到当贝桌面的完美蜕变 第一次接触电视盒子刷机时&#xff0c;那种既兴奋又忐忑的心情我至今记忆犹新。手里拿着价值不过百元的中兴B863AV3.2T盒子&#xff0c;却像捧着一个未知的宝藏——既期待通过刷机解锁它的全部潜能…...

GaussDB GDS 搭建完全指南:从安装到启动,一文搞定数据迁移服务

在进行 GaussDB 跨库数据迁移时&#xff0c;GDS&#xff08;Gauss Data Service&#xff09; 是实现外表迁移的核心组件。本文将手把手带你完成 GDS 的下载、安装、配置与启动&#xff0c;确保数据迁移通道畅通无阻。 &#x1f4ce; 关联阅读&#xff1a;GaussDB GDS 外表迁移实…...