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

news2024/11/19 9:28:17

文章目录

  • 前言
    • 字符串复制-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 写为 NULL

int 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode—2646.最小化旅行的价格总和【困难】

2023每日刷题&#xff08;五十三&#xff09; Leetcode—2646.最小化旅行的价格总和 算法思想 看灵神的 实现代码 class Solution { public:int minimumTotalPrice(int n, vector<vector<int>>& edges, vector<int>& price, vector<vector&l…

Win10的SVN Adapter V1.0 中黄色感叹号 -- 解决

大部分都问题都可以通过&#xff1a; 关闭 SVN Adapter V1.0 在下载最新的 SVNDrv.sys替换 C:\Windows\System32\drivers 中的同名文件启动 SVN Adapter V1.0 就能成功 但是部分人的电脑 SVN Adapter V1.0 是有感叹号的&#xff0c;说明注册表有问题 先用 CCleaner 修复注册表…

解决npm install时报:gyp ERR! configure error

报错内容&#xff1a; npm ERR! gyp ERR! cwd C:\Users\zccbbg\code\my\examvue\node_modules\node-sass npm ERR! gyp ERR! node -v v16.13.1 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok npm ERR! Build failed with error code: 1 解决办法&#xff1a;…

Weblogic T3协议反序列化漏洞

文章目录 1. Weblogic T3协议反序列化漏洞1.1 漏洞描述1.2 基本原理1.3 漏洞复现1.4 修复建议 1. Weblogic T3协议反序列化漏洞 1.1 漏洞描述 说明内容漏洞编号CVE-2018-2628漏洞名称Weblogic T3协议反序列化漏洞漏洞评级高危影响范围Weblogic 10.3.6.0Weblogic 12.1.3.0Webl…

从零开始学Scala,这些学习网站让你轻松入门!

介绍&#xff1a;Scala&#xff0c;可伸缩的语言&#xff0c;是一门多范式的编程语言&#xff0c;由联邦理工学院洛桑&#xff08;EPFL&#xff09;的Martin Odersky于2001年基于Funnel的工作开始设计。它是以Java虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象编程…

智能优化算法应用:基于灰狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于灰狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于灰狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.灰狼算法4.实验参数设定5.算法结果6.参考文献7.MA…

用友T3如何反结账、反记账、反审核及删除凭证

在T3总账中已经进行了总账记账和月末结账&#xff0c;但是需要去修改凭证或删除凭证&#xff0c;这个时候就需要去进行反结账、反记账等操作&#xff0c;以下是具体的操作流程 第一步、反结账 1、进入用友T3件&#xff0c;打开总账系统模块&#xff0c;点月末结账&#xff0c…

【链表OJ—链表的中间节点】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1、链表的中间节点 方法讲解&#xff1a; 图文解析&#xff1a; 代码实现&#xff1a; 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#x…

智能优化算法应用:基于蚁狮算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蚁狮算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蚁狮算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蚁狮算法4.实验参数设定5.算法结果6.参考文献7.MA…

pwn入门:基本栈溢出之ret2libc详解(以32位+64位程序为例)

目录 写在开头 题目简介 解题思路 前置知识&#xff08;简要了解&#xff09; plt表和got表 延迟绑定 例题详解 32位 64位 总结与思考 写在开头 这篇博客早就想写了&#xff0c;但由于近期事情较多&#xff0c;一直懒得动笔。近期被领导派去临时给合作单位当讲师&a…

全自动网印机配件滚珠螺杆起什么作用?

全自动网印机配件主要包括印刷网板、墨水或油墨箱、墨水或油墨管道、传动部件、移动部件、传动系统、控制系统、安全保护装置等等这些。 滚珠螺杆是一种精密的传动元件&#xff0c;能够将电机的旋转运动转化为线性运动&#xff0c;从而驱动印刷机的工作台进行精确的移动&#x…

Java毕业设计—vue+SpringBoot药房药店药品管理系统

项目介绍 项目背景 药店系统是现代医疗行业不可或缺的部分&#xff0c;它为药店提供全面、高效的管理服务&#xff0c;对保障顾客健康和药品质量起着至关重要的作用。 药店系统的功能主要包括库存管理、销售管理、客户管理和财务管理等多个方面。在库存管理方面&#xff0c;…

上网监控软件丨5大不同人群的锋利观点

上网监控软件是一种可以监控员工上网行为的软件&#xff0c;通常被用于企业或组织内部。这种软件可以记录员工访问的网站、发送的邮件、聊天的记录等&#xff0c;并可以对员工的上网行为进行控制和限制&#xff0c;从而提高员工的工作效率&#xff0c;防止数据泄露和网络攻击。…

PyCharm编辑器结合Black插件,轻松实现Python代码格式化

大家好&#xff0c;使用Black对Python代码进行格式化&#xff0c;可使代码看起来更美观。但是&#xff0c;随着项目规模不断变大&#xff0c;对每个文件运行Black变得很繁琐。本文就来介绍在PyCharm中实现这一目标的方法。 1.安装Black 首先&#xff0c;在虚拟环境中安装Blac…

javacv踩坑记录

前一阵学习opencv&#xff0c;发现在做人脸识别的时候遇到一些类库不存在的情况&#xff0c;查找后发现是由于拓展包没有安装完全&#xff08;仅安装了基础版&#xff09;。由于网络的问题&#xff08;初步猜测&#xff09;&#xff0c;始终无法安装好拓展包。 于是另辟蹊径&am…

【LeetCode刷题】数组篇2

&#x1f387;数组中等题Part &#x1f308; 开启LeetCode刷题之旅 &#x1f308; 文章目录 &#x1f387;数组中等题Part&#x1f370;229.多数元素II&#x1f451;思路分析1.哈希表法2.摩尔投票法(进阶) &#x1f370;15.三数之和&#x1f451;思路分析1.排序双指针 &#x…

CentOS 7 离线安装达梦数据库8.0

前期准备工作 确认操作系统的版本和数据库的版本是否一致 ## 查看系统版本&#xff1a;cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)关闭防火墙和Selinux # 查看selinux是不是disabled / enforce cat /etc/selinux/config## 查看防火墙状态 firewall-cmd …

【wpf】handycontrol growl 打造一个比弹窗优雅10倍的信息通知方式

前言 话不多说&#xff0c;先上图&#xff1a; 这种弹框不会影响主进程的脚本&#xff0c;同时分为四个等级&#xff1a; 普通消息&#xff1a;Info &#xff08;时间一到&#xff0c;自动消失&#xff0c;除非鼠标停留上面&#xff09;警告&#xff1a; Warning &#xff0…

【C++ Primer Plus学习记录】if语句

目录 一、if语句 二、if else语句 三、格式化if else语句 四、if else if else结构 一、if语句 if语句让程序能够决定是否应执行特定的语句。 if有两种格式&#xff1a;if和if else。 if语句的语法与while相似&#xff1a; if(test-condition)statement; 如果test-con…

Linux快速搭建本地yum更新audit

场景&#xff1a;内网一台服务器上线&#xff0c;需要更新audit版本&#xff0c;因无法与其他服务器通信&#xff0c;需临时配置本地仓库。 1、上传新版本操作系统iso到服务器 2、创建yum仓库文件存储目录 mkdir /opt/myrepo 3、挂载磁盘到/mnt mount /opt/Kylin-Server-V…