常用字符串函数的使用

article/2025/10/3 18:38:56

目录

一.求字符串长度

1.strlen用来计算字符串的长度(该长度不包括'\0')

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

1.strcpy字符串拷贝

 2.strcat附加一个字符串

 3.strcmp字符串大小比较

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

1.strncpy字符串拷贝(能设置要拷贝的字符个数)

 2.strncat 附加一个字符串(可指定要附加的大小)

 3.strncmp 字符串比较(可设置比较的个数)

四.字符串查找

1.strstr子字符串的查找

2.strtok字符串拆分


一.求字符串长度

1.strlen用来计算字符串的长度(该长度不包括'\0')

#include<stdio.h>
#include<string.h>
int main()
{char arr[]="abcdef";int ret=strlen(arr);printf("%d\n",ret);return 0;
}

运行结果:

模拟实现strlen

#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* arr)
{assert(arr);//断言用来判断接收的arr是否为NULLint count = 0;while (*arr++)//当*arr不等于'\0'时继续往下计算{count++;}return count;
}
int main()
{char arr[] = "abcdef";int ret = my_strlen(arr);//将arr传过去,传的是数组首元素的地址printf("%d\n", ret);return 0;
}

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

1.strcpy字符串拷贝

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "abcdef";char arr2[10] = { 0 };strcpy(arr2, arr1);printf("%s\n", arr2);return 0;
}

运行结果:

模拟实现strcpy

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* str)
{assert(dest && str);char* ret = dest;//记录dest的起始位置while (*dest++ = *str++)//当*str不等于'\0'时一直将现在的值赋值给dest{;}return ret;//函数返回类型为char*用ret返回
}
int main()
{char arr1[] = "abcdef";char arr2[10] = { 0 };my_strcpy(arr2, arr1);printf("%s\n", arr2);return 0;
}

 2.strcat附加一个字符串
 

#include<stdio.h>
#include<string.h>
int main()
{char arr1[10] = "abcd";char arr2[] = "efg";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

运行结果:

模拟实现strcat

#include<stdio.h>
#include<assert.h>char* my_strcat(char* dest, const char* str)
{assert(dest && str);char* ret = dest;while (*dest)//找到'\0'的位置{dest++;}while (*dest++ = *str++)//将字符赋值给目标{;}return ret;
}
int main()
{char arr1[10] = "abcd";char arr2[] = "efg";my_strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

 3.strcmp字符串大小比较

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "zhangsan";char arr2[] = "lisi";int ret = strcmp(arr1, arr2);printf("%d\n",ret);return 0;
}

运行结果:

模拟实现strcmp

string1小于string2时返回值小于0

string1等于string2时返回值等于0

string1大于string2时返回值大于0

该比较方法为比较等同位置的字符的ASCLL值的大小

若相同的话比较下一个字符的ASCLL值的大小

#include<stdio.h>
#include<assert.h>int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);while (*str1 == *str2&&*str1!='\0')//如果*str1和*str2相等且不等于'\0'时进行循环往下查找不相等的位置{str1++;str2++;}return *str1 - *str2;//两个字符的ASCLL值相减比较大小
}
int main()
{char arr1[] = "zhangsan";char arr2[] = "lisi";int ret = my_strcmp(arr1, arr2);printf("%d\n", ret);return 0;
}

运行结果:

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

1.strncpy字符串拷贝(能设置要拷贝的字符个数)

#include<stdio.h>
#include<string.h>
int main()
{char arr1[20] = "abcde";char arr2[20] = { 0 };strncpy(arr2, arr1, 4);printf("%s\n", arr2);return 0;
}

 运行结果:

模拟实现strncpy 

#include<stdio.h>
#include<assert.h>char* my_strncpy(char* dest, const char* str, size_t count)//该count的单位为字节
{assert(dest && str);char* ret = dest;while (count--)//循环的次数即为要赋值的个数{*dest++ = *str++;}return ret;
}
int main()
{char arr1[20] = "abcde";char arr2[20] = { 0 };my_strncpy(arr2, arr1, 4);printf("%s\n", arr2);return 0;
}

 2.strncat 附加一个字符串(可指定要附加的大小)

#include<stdio.h>
#include<string.h>
int main()
{char arr1[20] = "Hello ";char arr2[20] = "World and Earth";strncat(arr1, arr2, 5);printf("%s\n", arr1);return 0;
}

运行结果:

模拟实现strncat

#include<stdio.h>
#include<assert.h>
char* my_strncat(char* dest, const char* str, size_t count)
{assert(dest && str);char* ret = dest;while (*dest)//找到'\0'的位置{dest++;}while (count--)//循环执行的次数{*dest++ = *str++;}return ret;
}
int main()
{char arr1[20] = "Hello ";char arr2[20] = "World and Earth";my_strncat(arr1, arr2, 5);printf("%s\n", arr1);return 0;
}

 3.strncmp 字符串比较(可设置比较的个数)

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "zhangsan";char arr2[] = "zhangyi";int ret1 = strncmp(arr1, arr2, 5);int ret2 = strncmp(arr1, arr2, 6);printf("%d\n", ret1);printf("%d\n", ret2);return 0;
}

运行结果:

模拟实现strncmp

 

#include<stdio.h>
#include<assert.h>int my_strncmp(const char* str1, const char* str2, size_t count)
{assert(str1 && str2);while (count&&*str1==*str2)//如果*str1和*str2相等且不等于'\0'时进行循环往下查找不相等的位置{count--;str1++;str2++;}if (count == 0)//如果循环的次数全部执行说明要比较的字符串相等return 0;return *str1 - *str2;//ASCLL值相减比较大小
}
int main()
{char arr1[] = "zhangsan";char arr2[] = "zhangyi";int ret1 = my_strncmp(arr1, arr2, 5);int ret2 = my_strncmp(arr1, arr2, 6);printf("%d\n", ret1);printf("%d\n", ret2);return 0;
}

四.字符串查找

1.strstr子字符串的查找

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "abcdefabcd";char arr2[] = "efa";char* ret = strstr(arr1, arr2);printf("%s\n", ret);return 0;
}

运行结果:

 

 模拟实现strstr

 该函数的第一个参数为母字符串的首元素地址,第二个参数为子字符串的首元素的地址

#include<stdio.h>
#include<assert.h>char* my_strstr(const char* str1, const char* str2)
{assert(str1 && str2);char* ret = str1;//记录开始比较的地址while (*str1 == *str2 && *str2 != '\0')//寻找子字符串{str1++;str2++;}if (*str2 == '\0')//找到了return ret;ret++;if (*str1 == '\0')//找不到return NULL;
}
int main()
{char arr1[] = "abcdefabcd";char arr2[] = "efa";char* ret = strstr(arr1, arr2);printf("%s\n", ret);return 0;
}

2.strtok字符串拆分

strtok能将规定的字符转换为'\0'

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "zxcvbnm@qq.com";const char* str = "@.";//能被转为'\0'char arr2[20] = { 0 };strcpy(arr2, arr1);char* ret = NULL;for (ret = strtok(arr2, str); ret != NULL; ret = strtok(NULL, str))//for循环中第一个表达式找到arr1首元素的地址,该字符串到了'\0'才会停下,第3个表达式的NULL能找到上一次记录的地址{printf("%s\n", ret);}return 0;
}

五.错误信息报告 

1.strerror发现错误的信息

#include<stdio.h>
#include<string.h>
int main()
{int* p = (int*)malloc(_CRT_INT_MAX);//用malloc动态申请_CRT_INT_MAX个字节的内存,_CRT_INT_MAX值太大内存不足,产生错误 if (p == NULL)//如果为空指针的话会将错误码返回到errno中{printf("%s\n", strerror(errno));//用strerror接受错误的信息并打印出来}return 0;
}

 

运行结果:

 

内容到这里结束了,如果感觉有帮助的话点个赞呗


http://chatgpt.dhexx.cn/article/qKtfj15y.shtml

相关文章

字符串操作常用函数

字符串常用函数有如下 puts() //输出字符串 gets() //获取字符串 strlen() //计算字符串长度 memset() //初始化 strcpy() strncpy() //字符串的拷贝 strcat() //字符串的拼接 strcmp() //字符串的比较 strchr() strstr() //字符串的查找 strtok…

字符串函数

本文重点 重点介绍处理字符串内存的库函数的使用和注意事项 求字符串长度 ——strlen长度不受限制的字符串函数 ——strcpy、strcat、strcmp长度受限制的字符串函数介绍——strncpy、strncat、strncmp字符串查找——strstr、strtok错误信息报告——strerror字符操作 前言 C语…

java 使用 jep3.5 解析公式自动计算(包含BigDecimal模式 浮点数精准计算)

下载地址: jep3.5 jar包与文档.rar 由于3.X并未上传maven所有只能下载jar包使用maven本地导入 <dependency><groupId>com.singularsys</groupId><artifactId>jep</artifactId><version>3.5</version><scope>system</scope…

【译】Jep 文档(1)——介绍(Introction)

原文连接&#xff08;http://www.singularsys.com/jep/doc/html/index.html&#xff09; 介绍 综述 Jep 是一个用于分析和计算数学表达式的java库。有了这个包&#xff0c;您就可以把数学公式当作是字符串&#xff0c;并且立即求出它们的值。许多常见的数学函数和常量都是内…

Java RMI反序列化/JEP290相关

RMI 远程过程调用 (Remote Procedure Call)是一种服务器-客户端模式&#xff0c; Java的RMI&#xff08;Remote Method Invocation&#xff09;是一种RPC实现。 其基本思想是程序员可以像本地那样&#xff0c;与远程对象进行交互。 步骤&#xff1a; 1、创建一个接口IRemote…

Java第三方库——Jep数学公式计算

Java第三方库——Jep数学公式计算 官网简介&#xff1a;JEP JAVA仅用几行代码解析和计算数学表达式。这个包允许用户以字符串的形式输入公式&#xff0c;并立即对其求值。JEP支持用户定义的变量、常量和函数。包括一些常用的数学函数和常量。 1.下载3.x版本依赖并引入 官方网站…

你知道Java中的JCP, JEP, JLS, JSR是什么意思吗?

目录 一、JCP 二、JSR 三、JLS 四、JEP 公众号&#xff1a;MCNU云原生&#xff0c;欢迎微信搜索关注&#xff0c;更多干货&#xff0c;及时掌握。 JCP, JEP, JLS, JSR这些概念是Java社区中的一些概念&#xff0c;但是没有没有经常关注社区的童鞋们未必知道这些缩写所代表的…

Java中JCP, JEP, JLS, JSR是什么

JCP Java Community Process JCP&#xff08;Java Community Process&#xff09;是一个开放的国际组织&#xff0c;主要由Java开发者以及被授权者组成&#xff0c;职能是发展和更新。 JCP维护的规范包括J2ME、J2SE、J2EE&#xff0c;XML&#xff0c;OSS&#xff0c;JAIN等。组…

java 使用JEP解析字符串计算公式 求值(附带自定义函数编写)

2.X 存在精确度问题 推荐使用3.X 参考文章: java 使用 jep3.5 解析公式自动计算(包含BigDecimal模式 浮点数精准计算) 1.增加jep依赖 <dependency><groupId>org.scijava</groupId><artifactId>jep</artifactId><version>2.4.2</versio…

使用Jep在Java中执行Python代码

接上次用Eclipse编写Python代码&#xff1a;使用Eclipse编写Python代码_Cc_Sonia的博客-CSDN博客_eclipse写python程序 为了把深度学习模型部署到Java App上&#xff0c;需要用Java调用Python。试过Jython&#xff0c;但它只对python2有效。。。最后supervisor建议使用Jep&…

jep的使用

参考jep官网:http://www.singularsys.com/jep/ Jep Java只用几行代码解析和评估数学表达式。此程序包允许您的用户输入公式作为字符串&#xff0c;并立即对其进行评估。Jep支持用户定义的变量&#xff0c;常量和函数。包括许多常见的数学函数和常数。 那么啰嗦,说白了就是支持…

python JEP安装

安装python ( 深坑 &#xff1a;安装之前请yum install python3-devel 避免出现i.e.: export LD_PRELOAD/usr/lib/libpython2.7.so.1.0 问题 ) 下载源码 Python Release Python 3.6.5 | Python.org 解压 进入目录 ./configure --prefix/opt/software/python --enab…

JEP:Java表达式分析器

JEP 是一个用于解析和计算数学表达式的 Java 类库。通过使用这个包你可以把公式看 作字符串并快速计算它们。其中内置了大量公共的数学函数和常量供用户使用。另外&#xff0c;你也 可以通过自定义变量、常量、函数等方式扩展 JEP 。 使用 JEP 计算一个字符串表达式包括…

java 使用JEP 进行节点计算

2.X 存在精确度问题 推荐使用3.X 参考文章: java 使用 jep3.5 解析公式自动计算(包含BigDecimal模式 浮点数精准计算)​​​​​​​ 1.JEP基础相关 请参考: java 使用JEP解析字符串计算公式 求值(附带自定义函数编写) 2.使用节点计算 注释写的很明白 要仔细看 public st…

如何在Java中执行Python模块?从认识JEP库开始

让我们从认识JEP库开始。 关注《Java学研大本营》 本教程基于带M1芯片的macOSX&#xff0c;用于Python 3.8/3.9和Java 11。 介绍 从我的实践来讲&#xff0c;我遇到的上一个挑战是&#xff0c;当基础应用引擎是Java的时候&#xff0c;我按常理应该添加一个新的机器学习功能。…

JEP 290 初识

JEP 290 初识 全局过滤器自定义过滤器内置过滤器 JEP 290是 oracle提供已一套JAVA反序列化机制&#xff0c;其并不是一种必须被强制执行的策略&#xff0c;而是需要程序员或者运维人员进行开发与启用。关于该机制的优缺点借用老外的一篇文章 https://dzone.com/articles/a-firs…

jep 使用方法与简介

1什么是jep JEP是Java expression parser的简称&#xff0c;即java表达式分析器&#xff0c;Jep是一个用来转换和计算数学表达式的java库。通过这个程序包&#xff0c;用户可以以字符串的形式输入一个、任意的公式&#xff0c;然后快速地计算出结果。Jep支持用户自定义变量、常…

那些人工智能明星公司都在搞什么?

事件&#xff1a;全球机器学习技术大会 时间&#xff1a;2021年1月13-14日 地点&#xff1a;金茂北京威斯汀大饭店 画外音&#xff1a;文末送所有PPT。 大会特邀近40位机器学习领域的技术领袖和行业应用专家&#xff0c;与1000来自电商、金融、汽车、智能制造、通信、工业互联网…

中国人工智能公司CIMCAI世界港航AI领军企业,自动化港口数字化码头,智能闸口各箱面箱况残缺检测视频流动态感知中国人工智能公司

中国人工智能公司CIMCAI世界港航AI领军企业&#xff0c;自动化港口数字化码头&#xff0c;智能闸口各箱面箱况残缺检测视频流动态感知&#xff0c;智能化港口码头数字化。CIMCAI已完成全球250万人工智能集装箱箱况检验&#xff0c;完成全球上亿集装箱信息&#xff0c;先进产品在…

外媒评选出来的中国五大人工智能(AI) 公司

https://www.toutiao.com/a6656628348795486727/ 2019-02-11 14:37:43 全球三分之二的人工智能投资正在进入中国市场&#xff0c;仅去年一年就帮助人工智能行业增长了67&#xff05;。 中国科技行业最近宣布了其前50家人工智能公司。其中包括14只“独角兽”--估值为10亿美元或…