当前位置: 首页 > news >正文

编程之路,从0开始:字符函数和字符串函数

Hello大家好!很高兴我们又见面了!

给生活添点passion,开始今天的编程之路!

 

目录

1、字符分类函数

2、字符转换函数

3、字符串函数

1、 strcpy

2、 strcat

3、 strcmp

4、strlen(s)

5、strstr(s1, s2)

6、 strtok(s1, s2)


 

1、字符分类函数

字符分类函数 如果符合就返回真

iscntrl 任何控制字符

isspace 空白字符

isdigit 十进制0到9

isxdigit 十六进制

islower 小写字母

isupper 大写字母

isalpha 字母

isalnum 字母或者数字

ispunct 标点符号

isgraph 任何图形字符

isprint 任何可打印字符

以上是字符分类函数的作用

2、字符转换函数

toupper() 函数将小写字母转换为大写字母。

tolower()函数将给定的字符转换成小写字母。

3、字符串函数

在C语言中给定的字符串函数很多

1. strcpy(s1, s2):复制字符串,将s2复制到s1。

2. strncpy(s1, s2, n):复制字符串,将s2的前n个字符复制到s1。

3. strcat(s1, s2):连接字符串,将s2连接到s1的末尾。

4. strncat(s1, s2, n):连接字符串,将s2的前n个字符连接到s1的末尾。

5. strcmp(s1, s2):比较字符串,比较s1和s2,返回值表示s1和s2的字典顺序,大于0则s1在前。

6. strncmp(s1, s2, n):比较字符串,比较s1和s2的前n个字符。

7. strlen(s):计算字符串长度,返回s的长度,不包括结尾的空字符。

8. strchr(s, c):查找字符,返回指向s中第一次出现c的指针。

9. strrchr(s, c):查找字符,返回指向s中最后一次出现c的指针。

10. strstr(s1, s2):查找子串,返回指向s1中第一次出现s2的指针。

11. strtok(s1, s2):分割字符串,使用s2中的分隔符分割s1。

12. strtok_r(s1, s2, p):分割字符串,线程安全的版本。

13. strdup(s):复制字符串,动态分配内存并复制s。

14. strndup(s, n):复制字符串,动态分配内存并复制s的前n个字符。

15. strcoll(s1, s2):比较字符串,使用当前区域设置比较s1和s2。

16. strxfrm(s1, s2):转换字符串,转换s2以便使用strcoll比较。

这些字符串函数都包含在头文件string.h中

这里我们简单介绍几个常用的函数,并对他们进行模拟实现:

1、 strcpy

复制字符串,将s2复制到s1。

函数原型:ea5d203e89cd4188b1b4119fdfe05f96.png

使用:

#include<stdio.h>
#include<stdio.h>
int main()
{char a[20] = "ADD";char b[20] = {0};strcpy(b,a);printf("%s",b);return 0;
}

模拟实现:

#include<stdio.h>
void My_strcpy(char *a,char *b)
{int i = 0;int* c = b;while (a[i] != '\0'){*(b+i) = *(a+i);i++;}}
int main()
{char a[20] = "asdasd";char b[20] = {0};My_strcpy(a,b);printf("%s",b);return 0;
}

2、 strcat

连接字符串,将s2连接到s1的末尾。

函数原型:

104f451f35d241019a72febfc87ec8f8.png

使用:

#include<stdio.h>
#include<stdio.h>
int main()
{char a[20] = "GET SOME";char b[20] = " PASSION";strcat(a,b);printf("%s",a);return 0;
}

模拟实现:

#include<stdio.h>
void My_strcat( char *a,const char *b)
{int i = 0;while (*a!='\0'){a++;}while (*a = *b){a++;b++;}}
int main()
{char a[20] = "ADD";char b[20] = "PASSION";My_strcat(a,b);printf("%s",a);return 0;
}

3、 strcmp

比较字符串,比较s1和s2,返回值表示s1和s2的字典顺序,大于0则s1在前。

a4147315c79e48999d9899dabbcd53e2.png

使用:

#include<stdio.h>
#include<stdio.h>
int main()
{char a[20] = "GET SOME";char b[20] = " PASSION";if (strcmp(a, b) > 0){printf("%s", a);}return 0;
}

模拟实现:

#include<stdio.h>
int My_strcmp(const char *a,const char *b)
{int i = 0;int* c = b;while (*a==*b){if (*a == '\0'){return 0;}a++;b++;}return *a - *b;
}
int main()
{char a[20] = "asdasd";char b[20] = "asa";int ret=My_strcmp(a,b);printf("%d",ret);return 0;
}

4、strlen(s)

计算字符串长度,返回s的长度,不包括结尾的空字符。

fe3950fcf9ef400e95d8ddd56c4aec0b.png

使用:前面已经多次使用了,这里不再举例。

模拟实现:

#include<stdio.h>
int My_strlen(char *arr)
{int i = 0;int len = 0;for (i = 0;arr[i] != '\0';i++){len++;}return len;
}
int main()
{char a[]="asdasd";int len = My_strlen(a);printf("%d",len);return 0;
}

5、strstr(s1, s2)

查找子串,返回指向s1中第一次出现s2的指针。

a46d69b22cd94a3d8bc0b68a8f7cbef5.png使用:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{char a[20] = "PASSION";char b[20] = "SS";char* c = strstr(a, b);printf("%s",c);return 0;
}

模拟实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include  <stdio.h>
char *Mystrstr(const char a[], char* p)
{char* str = (char*)a;char* i=a;char* j = p;if (!*p){return a;}while (*str){i = str;j = (char*)p;while (*i && *j && (*i == *j)){i++;j++;}if (!*j){return str;}str++;}return (NULL);}
int main()
{char a[20] = "asdfghjkl";char* ret = Mystrstr(a,"dfg");printf("%s",ret);return 0;
}

6、 strtok(s1, s2)

分割字符串,使用s2中的分隔符分割s1。

cdae523c380541c6beae15ecb46f50cd.png使用:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <string.h>int main()
{char str[100] = "- This, a sample string.";char* pch = strtok(str, " ,.-");//将地址保存到遇到停止符之前,打印到遇到下一个停止符的时候printf("%s\n",pch);//pch = strtok(NULL, " ,.-");//第二次使用这个函数就将第一个参数换位NULLreturn 0;
}

        这个函数有点复杂,就不模拟实现了hhh~

        今天的内容就分享到这,欢迎订阅我们的专栏:编程之路,获取更多高质量内容!

 

http://www.lryc.cn/news/483523.html

相关文章:

  • 化工防爆巡检机器人:在挑战中成长,为化工安全保驾护航
  • 音频采样数据格式
  • 【pytorch】常用强化学习算法实现(持续更新)
  • DAY59||并查集理论基础 |寻找存在的路径
  • Mybatis执行自定义SQL并使用PageHelper进行分页
  • OpenCV DNN
  • 什么时候需要复写hashcode()和compartTo方法
  • PostgreSQL 日志文件备份
  • 2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序
  • 数字农业产业链整体建设方案
  • awk那些事儿:在awk中使用shell变量的两种方式
  • 大数据面试题--kafka夺命连环问(后10问)
  • 智能量化交易的多样化策略与风险控制:中阳模型的应用与发展
  • 小皮PHP连接数据库提示could not find driver
  • 2024.11.13(一维数组相关)
  • 豆包MarsCode算法题:数组元素之和最小化
  • Hbase Shell
  • 激活函数解析:神经网络背后的“驱动力”
  • 【开源免费】基于SpringBoot+Vue.JS水果购物网站(JAVA毕业设计)
  • 推荐一款多物理场模拟仿真软件:STAR-CCM+
  • React Hooks在现代前端开发中的应用
  • 重学SpringBoot3-整合Quartz定时任务
  • STM32单片机WIFI语音识别智能衣柜除湿消毒照明
  • spring中entity的作用
  • 2019年下半年试题二:论软件系统架构评估及其应用
  • 网络自动化04:python实现ACL匹配信息(主机与主机信息)
  • 字典树介绍以及C++实现
  • 【C++】用红黑树封装set和map
  • 【大数据测试HDFS + Flask详细教程与实例】
  • 高级java每日一道面试题-2024年10月31日-RabbitMQ篇-RabbitMQ中vhost的作用是什么?