字符串操作常用函数

article/2025/10/3 18:42:33

字符串常用函数有如下

puts()      //输出字符串
gets()      //获取字符串
strlen()    //计算字符串长度
memset()     //初始化
strcpy()  strncpy() //字符串的拷贝
strcat()     //字符串的拼接
strcmp()     //字符串的比较
strchr()  strstr()   //字符串的查找
strtok() //字符串分割
strlwr()  strupr()  //字符串转为小写和字符串转为大写

1、puts()和geits()

puts()函数用来向输出设备(屏幕)输出字符串并自带换行,将’\0’转换为回车换行,其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针),puts和printf("%s",s)的功能差不多,不同之处在于puts自带换行。

gets()函数用来从输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加’\0’,其调用格式为:gets(s);其中s为字符串变量(字符串数组名或字符串指针),gets()函数读取到\n(我们输入的回车)于是停止读取,但是它不会把\n包含到字符串里面去,然后,和puts函数配合使用,在输出字符串的时候自动换行。
示例代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main()
{char str[128] = {'\0'};//如果是char *str的话要注意野指针printf("请输入字符串\n");gets(str);puts(str);system("pause");return 0;}

在这里插入图片描述
在这里如果用指针的话要注意野指针

2、strlen()

对于strlen()函数可以参考strlen

3、memset()

memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组, c 是赋给buffer的值, count 是buffer的长度,简单的说就是将buffer中初始化为c,大小为count,memset函数作用是在一段内存块中填充某个给定的值,它是对数组进行清零操作最快的一种最快方法。

示例代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main()
{//char str[128] = {'\0'};char *pstr;pstr = (char*)malloc(128); //注意野指针memset(pstr,'\0',128);   //初始化为‘\0’printf("请输入字符串\n");gets(pstr);puts(pstr);system("pause");return 0;}

在这里插入图片描述
这里的memset是给指针pstr初始化,用三条代码代替了用数组定义的一条代码,虽然条数多了,但是指针比数组更加灵活,更加方便。

4、strcpy() 和 strncpy()

在C语言函数中strcpy函数原型为:char * strcpy(char * Dest,const char * Src);
功能是把从src地址开始的字符串复制到以dest开始的地址空间
注意:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。

strncpy函数用于将指定长度的字符串复制到字符数组中,是 C语言的库函数之一,语法形式为:char *strncpy(char *dest, const char *src, int n),表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest 。

strcpy和strncpy的区别:
strcpy只是复制字符串,但不限制复制的数量,很容易造成溢出,strncpy要安全一些。
strncpy能够选择一段字符输出,strcpy则不能。

示例代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main()
{char pstr1[128] = "helloworld";char *pstr2 = "china";strcpy(pstr1,pstr2);printf("strcpy = %s\n",pstr1);// strncpy(pstr1,pstr2,3);  //将pstr2的前三个字符拷贝到pstr1前三个位置// printf("strncpy = %s\n",pstr1);system("pause");return 0;
}

在这里插入图片描述
在这里插入图片描述
这里运行时strcpy和strncpy要分开运行。

当拷贝目标为指针时

    char *pstr;pstr = (char*)malloc(128);if(pstr == NULL){printf("开辟空间失败\n");exit(-1);}memset(pstr,'\0',10);char pstr1[128] = "hello";//strcpy(pstr,pstr1); //printf("strcpy = %s\n",pstr);strncpy(pstr,pstr1,2);printf("strncpy = %s\n",pstr);

5、strcat()

strcat()为字符串的拼接函数,函数原型为extern char strcat(char dest, const char src);把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除dest原来末尾的“\0”)但是要保证dest足够长,以容纳被复制进来的src,*src中原有的字符不变,返回指向dest的指针。
示例代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main()
{char pstr[128] = "hello";char *pstr1 = "world";strcat(pstr,pstr1);printf("strcat = %s\n",pstr);system("pause");return 0;
}

在这里插入图片描述

6、strcmp()

strcmp() 函数原型为 extern int strcmp(const char *s1,const char *s2);函数的返回类型为整型,用于比较两个字符串并根据比较结果返回整数、基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止

示例代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main()
{char pstr[128] = "hello";char *pstr1 = "world";int cnt = strcmp(pstr,pstr1);printf("strcmp返回值 = %d\n",cnt);system("pause");return 0;
}

在这里插入图片描述

7、strchr() 和 strstr()

strchr()为字符的查找函数,函数原型为:char *strchr(const char *str, char c),即在字符串 str 所指向的内存中搜索第一次出现字符 c(一个无符号字符)的位置,在参数str所指向的字符串中搜索第一次出现字符 c 的位置,返回一个指向 str 中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。

示例代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main()
{char pstr[128] = "hello";char c = 'o';char* p = NULL;p = strchr(pstr,c);if(p == NULL){printf("没有找到字母 o \n");}else{printf("找到字母 o \n");puts(p);}system("pause");return 0;
}

在这里插入图片描述
strstr()是字符串的查找函数,strstr函数原型char *strstr(const char *haystack, const char *needle) 用于判断字符串needle是否是haystack的子串,和strchr()函数的不同之处在于strchr函数是查找一个字符,而strstr是查找一个字符串, 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’ ,该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

示例代码

#include <stdio.h>
#include <string.h>
#include<stdlib.h>int main()
{char pstr[128] = "helloworld";char *pstr1 = "wor";//char *pstr1 = "world";char *ret = NULL;ret = strstr(pstr, pstr1);if(ret == NULL){printf("没有找到\n");}else{printf("找到了\n");printf("找到的子字符串为 %s \n",ret);}system("pause");return(0);
}

在这里插入图片描述

8、strtok()

strtok()为分割字符串为一组字符串,函数原型为char *strtok(char s[ ], const char *delim),s为要分解的字符串,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符,s指向要分解的字符串,之后再次调用要把s设成NULL。

s开头一个个被分割的串,当s中的字符查找到末尾时,返回NULL,如果查找不到delim中的字符时,返回当前strtok的字符串的指针,所有delim中包含的字符都会被滤掉。

示例代码

#include <stdio.h>
#include <string.h>
#include<stdlib.h>int main()
{char *p = NULL;char pstr[128] = "hello1,world1,hello2,world2";char *ps = ",";p = strtok(pstr,ps);if(p != NULL){printf("获取到第一个字符串p = %s\n",p);}//从第二次开始目标字符串要改为NULLp = strtok(NULL,ps);   if(p != NULL){printf("获取到第二个字符串p = %s\n",p);}p = strtok(NULL,ps);  if(p != NULL){printf("获取到第三个字符串p = %s\n",p);}p = strtok(NULL,ps);   if(p != NULL){printf("获取到第四个字符串p = %s\n",p);}system("pause");return(0);
}

在这里插入图片描述
可以看到上面这一种字符串的分割方法有点啰嗦,可以用循环对代码进行优化

如下

#include <stdio.h>
#include <string.h>
#include<stdlib.h>int main()
{char *p = NULL;char pstr[128] = "hello1,world1,hello2,world2";char *ps = ",";int i = 1;char* pstrarray[10];  //pstrarray[10]用来存放分割的字符串p = strtok(pstr,ps);if(p != NULL){printf("获取到第%d个字符串p = %s\n",i,p);pstrarray[i-1] = p;}while(1){i++;p = strtok(NULL,ps);if(p != NULL){pstrarray[i-1] = p;printf("获取到第%d个字符串p = %s\n",i,p);}else{printf("没有子串了\n");break;}}int j;                    //i最后 = 5,pstrarry最后只是到了pstrarry[3](需要访问4次)for(j = 0;j < i-1;j++){  //如果是j < i会访问5次,会出现乱码,所以是i-1puts(pstrarray[j]);}system("pause");return(0);
}

在这里插入图片描述

9、strlwr() 和 strupr()

C语言中,strlwr函数和strupr函数的用法都是直接传入字符串调用,strlwr函数的作用是将字符串参数转换为小写形式。strupr函数的作用是将字符串参数转换为大写形式。

strlwr函数原型为extern char *strlwr(char *s);函数功能是将字符串s转换为小写形式,(只转换s参数中出现的大写字母,不改变其它字符),返回指向s参数的指针。

strupr函数原型是extern char *strupr(char *s);函数功能是将字符串s转换为大写形式,(只转换s参数中出现的小写字母,不改变其它字符),返回指向s参数的指针。

示例代码

#include <stdio.h>
#include <string.h>
#include<stdlib.h>int main()
{char pstr[12] = "HELLO";char pstr1[12] = "hello";char *p = NULL;char *p1 = NULL; p = strlwr(pstr);p1 = strupr(pstr1);printf("大写转换为小写为%s\n",p);printf("小写转换为大写为%s\n",p1);system("pause");return(0);
}

在这里插入图片描述


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

相关文章

字符串函数

本文重点 重点介绍处理字符串内存的库函数的使用和注意事项 求字符串长度 ——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亿美元或…

【研究】那些人工智能公司现在发展到哪一步了?

作者&#xff1a;欧应刚 | 小编&#xff1a;小葱 近期&#xff0c;为了撰写《2018中国人工智能应用与生态研究报告》&#xff0c;中国软件网对我国人工智能产业应用和平台、生态建设进行了调研&#xff0c;以下是部分调研结果&#xff0c;更多内容见报告完整版。 1.已经有相当…