C语言:字符函数和字符串函数(一篇拿捏字符串函数!)
目录
求字符串长度:
1. strlen(字符串长度)
长度不受限制函数:
2. strcpy(字符串拷贝)
3. strcat(字符串追加)
4. strcmp(字符串比较)
长度受限制函数:
5. strncpy(字符串拷贝)
6. strncat(字符串追加)
7. strncmp(字符串比较)
字符串查找:
8. strstr(查找字符串子串)
9. strtok(字符串分割)
错误信息报告:
10. strerror(返回错误信息)
字符操作函数:
字符转换:
1. tolower(小写->大写)
2. toupper(大写->小写)
内存操作函数:
1. memcpy(内存拷贝)
2. memmove(内存拷贝)
3. memcmp(内存比较)
4. memset(内存设置)
求字符串长度:
1. strlen(字符串长度)
size_t strlen ( const char * str );str:C 字符串。返回值:unsigned int.
#include <stdio.h>
#include <string.h>int main()
{if ((int)strlen("abc") - (int)strlen("abcdef") > 0){printf("大于\n");}else{printf("小于等于\n");}return 0;
} 长度不受限制函数:
2.strcpy(字符串拷贝)
char* strcpy(char * destination, const char * source );destinatiob:指向要在其中复制内容的目标 数组的指针。source:要复制的 C 字符串。
#include <stdio.h>
#include <string.h>int main()
{//char arr1[3] = "";//char arr2[] = "hello bit";char* arr1 = "xxxxxxxxxx";char arr2[6] = { 'a', 'b', 'c', 'd', 'e' , '\0'};strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}
3.strcat(字符串追加)
char * strcat ( char * destination, const char * source );destination:指向目标数组的指针,该数组应包含 C 字符串,并且足够大以包含串联的结果字符串。source: 要追加的 C 字符串。这不应与 目标 重叠。
#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = "hello ";char arr2[] = "world";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
} 4. strcmp(字符串比较)
int strcmp ( const char * str1, const char * str2 );str1:要比较的 C1 字符串。str2:要比较的 C2 字符串。
#include <stdio.h>
#include <string.h>int main()
{int ret = strcmp("bbq", "bcq");if (ret>0)printf(">\n");printf("%d\n", ret);return 0;
}
长度受限制函数:
5. strncpy(字符串拷贝)
char * strncpy ( char * destination, const char * source, size_t num );destination:指向要在其中复制内容的目标数组的指针。source:要复制的 C 字符串。num :要从 源复制的最大字符数;size_t 是无符号整数类型。
#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = "abcdef";char arr2[] = "xxx";strncpy(arr1, arr2, 5);return 0;
}
6. strncat(字符串追加)
char * strncat ( char * destination, const char * source, size_t num );destination:指向目标数组的指针,该数组应包含一个 C 字符串,并且足够大以包含串联的结果字符串,包括其他 null 字符。source:要追加的 C 字符串。num: 要追加的最大字符数。size_t是无符号整数类型。
#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = "abcdef\0yyyyyyyy";char arr2[] = "xxxxxxxxx";strncat(arr1, arr2, 3);return 0;
}
7. strncmp(字符串比较)
int strncmp ( const char * str1, const char * str2, size_t num );str1:要比较的 C1 字符串。str2:要比较的 C2 字符串。num:要比较的最大字符数。
size_t是无符号整数类型。
#include <stdio.h>
#include <string.h>int main()
{char arr1[] = "abcqwertyuiop";char arr2[] = "abcdef";printf("%d\n", strncmp(arr1, arr2, 4));return 0;
}
字符串查找:
8. strstr(查找字符串子串)
char * strstr ( const char *str1, const char * str2);str1:要扫描的 C 字符串。str2:包含要匹配的字符序列的 C 字符串。
#include <stdio.h>
#include <string.h>int main()
{char arr1[] = "abbbcdef";char arr2[] = "bbc";char* ret = strstr(arr1, arr2);if (ret != NULL)printf("%s\n", ret);elseprintf("找不到\n");return 0;
}
9. strtok(字符串分割)
char * strtok ( char * str, const char * sep );str:要截断的 C 字符串。请注意,此字符串是通过分解为较小的字符串(标记)来修改的。或者,可以指定空指针,在这种情况下,函数将继续扫描以前成功调用函数的位置。sep :包含分隔符字符的 C 字符串。这些可能因调用而异。
#include <stdio.h>
#include <string.h>int main()
{char arr[] = "zpengwei@yeah.net@666#777";char copy[30];strcpy(copy, arr);char sep[] = "@.#";char* ret = NULL;for (ret = strtok(copy, sep); ret != NULL; ret=strtok(NULL, sep)){printf("%s\n", ret);}return 0;
}
错误信息报告:
10. strerror(返回错误信息)
char * strerror ( int errnum );errnum :错误号。库函数在执行的时候,发生了错位会将一个错误码存放errno这个变量中errno是C语言提供的一个全局的变量。
#include <stdio.h>
#include <string.h>int main()
{int i = 0;for (i = 0; i < 10; i++){printf("%d: %s\n", i, strerror(i));//}return 0;
}
字符操作函数:
| 函数 | 如果他的参数符合下列条件就返回真 |
|---|---|
| iscntrl | 任何控制字符 |
| isspace | 空白字符:空格 ‘ ’ ,换页 ‘\f’ ,换行 '\n' ,回车 ‘\r’ ,制表符 '\t' 或者垂直制表符 '\v' |
| isdigit | 十进制数字 0~9 |
| isxdigit | 十六进制数字,包括所有十进制数字,小写字母 a~f ,大写字母 A~F |
| islower | 小写字母 a~z |
| isupper | 大写字母 A~Z |
| isalpha | 字母 a~z 或 A~Z |
| isalnum | 字母或者数字, a~z,A~Z,0~9 |
| ispunct | 标点符号,任何不属于数字或者字母的图形字符(可打印) |
| isgraph | 任何图形字符 |
| isprint | 任何可打印字符,包括图形字符和空白字 |
字符转换:
1.towlower(小写->大写)
int tolower ( int c );
c:要转换、转换为 int 或 EOF 的字符。
#include <stdio.h>
#include <ctype.h>int main()
{printf("%c\n", tolower('A'));printf("%c\n", tolower('s'));return 0;
}
2. toupper(大写->小写)
int toupper ( int c );
c:要转换、转换为 int 或 EOF 的字符。
#include <stdio.h>
#include <ctype.h>int main()
{char arr[20] = { 0 };gets(arr);//遇到空格继续读char* p = arr;while (*p){if (isupper(*p))// *p>='A' && *p<='Z'{*p = tolower(*p);//*p = *p+32;}p++;}printf("%s\n", arr);return 0;
}
内存操作函数:
1. memcpy(内存拷贝)
void * memcpy ( void * destination, const void * source, size_t num );destination:指向要在其中复制内容的目标数组的指针,类型转换为 void* 类型的指针。source:指向要复制的数据源的指针,类型转换为 const void* 类型的指针。num :要复制的字节数。
size_t 是无符号整数类型。
#include <stdio.h>
#include <string.h>int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[20] = { 0 };//将arr1中的内容,拷贝到arr2中memcpy(arr2, arr1, 40);int* int*int i = 0;for (i = 0; i < 20; i++){printf("%d ", arr2[i]);}return 0;
}
2. mommove(内存拷贝)
void * memmove ( void * destination, const void * source, size_t num );destination:指向要在其中复制内容的目标数组的指针,类型转换为 void* 类型的指针。source:指向要复制的数据源的指针,类型转换为 const void* 类型的指针。num : 要复制的字节数。size_t 是无符号整数类型。
#include <stdio.h>
#include <string.h>int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };// 1 2 1 2 3 4 5 8 9 10memmove(arr1, arr1+2, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr1[i]);}return 0;
}
3. memcmp(内存比较)
int memcmp ( const void * ptr1, const void * ptr2, size_t num );ptr1:指向内存块的指针。ptr2:指向内存块的指针。num :要比较的字节数。
#include <stdio.h>
#include <string.h>int main()
{int arr1[] = { 1,2,1,4,5,6 };int arr2[] = { 1,2,257 };int ret = memcmp(arr1, arr2, 10);printf("%d\n", ret);return 0;
}
4. memset(内存设置)
void * memset ( void * ptr1, int value, size_t num );
ptr1:指向要填充的内存块的指针。
value:要设置的值。该值作为 int 传递,但该函数使用此值的无符号 char 转换填充内存块。
num :要设置为该值的字节数。
size_t 是无符号整数类型。
#include <stdio.h>
#include <string.h>int main()
{char arr[] = "hello bit";memset(arr+1,'x',4);//以字节为单位设置的printf("%s\n", arr);return 0;
}
以上就是个人学习见解和学习的解析,欢迎各位大佬在评论区探讨!
感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!
相关文章:
C语言:字符函数和字符串函数(一篇拿捏字符串函数!)
目录 求字符串长度: 1. strlen(字符串长度) 长度不受限制函数: 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数: 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字…...
问道管理:成交量买卖公式?
跟着股票商场的如火如荼,人们对于怎么解读和使用成交量进行股票生意的需求日积月累。成交量是指在某一特定时间内进行的股票生意的数量,它是投资者们研判商场状况和制定生意战略的重要指标之一。那么,是否存在一种最厉害的成交量生意公式呢&a…...
【MySQL】5、MySQL高阶语句
一、常用查询(增、删、改、查) 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等 模板表: 数据库有一张info表,记录了学生…...
【Linux】redhat7.8配置yum在线源【redhat7.8镜像容器内配置yum在线源】通用
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...
强大的处理器和接口支持BL304ARM控制器
在智慧医疗领域,BL304可以用于实现医疗设备的智能化、远程监控和数据交换。在智慧电力领域,BL304可以帮助实现电网的智能化管理,提升电力供应的效率。在智慧安防领域,BL304可以实现智能监控、智能门锁等应用,保障安全。…...
react 基础知识(一)
1、 安装1 (版本 react 18) // 安装全局脚手架(create-react-app基于webpackes6) npm install -g create-react-app //使用脚手架搭建项目 create-react-app my-app // 打开目录 cd my-app // 运行项目 npm start2、初体验 impo…...
SpringBoot整合JUnit、MyBatis、SSM
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 SpringBoot整合 一、SpringBoot整合JUnit二、Spri…...
virtuoso61x中集成calibre
以virtuoso618为例,在搭建完电路、完成前仿工作之后绘制版图,版图绘制完成之后需要进行drc和lvs【仅对于学校内部通常的模拟后端流程而言】,一般采用mentor的calibre来完成drc和lvs。 服务器上安装有virtuoso和calibre,但是打开la…...
com.google.guava:guava 组件安全漏洞及健康分析
组件简介 维护者google组织许可证类型Apache-2.0首次发布2010 年 4 月 26 日最新发布时间2023 年 8 月 1 日GitHub Star48189GitHub Fork10716依赖包28,694依赖存储库219,576 Guava 是 Google 的一组核心 Java 库,其中包括新的集合类型(例如 multimap 和…...
Hadoop服务脚本
#!/bin/bash process("NameNode" "SecondaryNameNode" "DataNode" "NodeManager" "ResourceManager") JAVA_HOME"/opt/software/jdk1.8.0_371" HADOOP_HOME"/opt/software/hadoop-3.3.6"# 定义颜色的AN…...
[QT]设置程序仅打开一个,再打开就唤醒已打开程序的窗口
需求:speedcrunch 这个软件是开源的计算器软件。配合launch类软件使用时,忘记关闭就经常很多窗口,强迫症,从网上搜索对版本进行了修改。 #include "gui/mainwindow.h"#include <QCoreApplication> #include <…...
数据库(二) Oracle篇
Oracle SQL常用函数 概述 SQL函数有单行函数和多行函数,其区别为: 单行:输入一行,返回一行,如字符、数字、转换、通用函数等多行:输入多行,返回一行,也称为分组函数、组函数、聚合函数,且多行函数会自动滤空 单行函数 字符函数 CONCAT(…...
TDengine函数大全-目录
TDengine函数大全 详情见具体页面,点击进入。 1.数学函数 ABSACOSASINATANCEILCOSFLOORLOGPOWROUNDSINSQRTTAN 2.字符串函数 CHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMRTRIMSUBSTRUPPER 3.转换函数 CAST TO_ISO8601TO_UNIXTIMESTAMPTO_JSON 4.时间和日期…...
代理模式之静态代理
代理模式是一种常见的设计模式,它允许一个对象(代理对象)代表另一个对象(真实对象)进行操作。在软件开发中,代理模式被广泛应用于各种场景,例如网络请求的代理、权限控制的代理等。 静态代理是…...
LeetCode——栈的压入、弹出序列
这里我用下面的例子子来讲解一下模拟栈的实现。 例子1:pushed [1,2,3,4,5] popped [4,5,3,2,1] 思路:第一步:我们先创建一个栈,然后将pushed的数据压进去 第二步:判断! 当压入栈的数据和popped第一个数据…...
Flutter 逆向安全
前言: 前几天在 "学习" 一个项目, 发现是用 Flutter 开发的。之前研究过 flutter 的逆向,早期 Flutter 有工具可以通过快照进行反编译:《对照表如下》 新的版本开发者没有维护了。 目前没有很好的工具 可以对 Flutter 进…...
【微服务部署】01-Kubernetes部署流程
文章目录 部署1. Kubernetes是什么2. Kubernetes的优势3. 环境搭建4. 应用部署 部署 1. Kubernetes是什么 Kubernetes是一个用于自动部署、扩展和管理容器化应用程序的开源系统 2. Kubernetes的优势 自动化容器部署资源管理与容器调度服务注册发现与负载均衡内置配置与秘钥…...
SPI3+DMA外设驱动-TFTLCD初始化
前言 (1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。 (2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片…...
通过chatgpt 学习React的useEffect
定义: useEffect 是 React 中的一个 Hook,它用于处理函数组件中的副作用操作。副作用操作可以包括数据获取、订阅事件、定时器等。 useEffect 接受两个参数:第一个参数是一个回调函数,用于执行副作用操作;第二个参数…...
rabbitMq介绍及使用
点击跳转https://blog.csdn.net/qq_43410878/article/details/123656765...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

