当前位置: 首页 > 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 个 全新 节…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...