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

C语言基础:字符串函数使用与剖析

strtok(分割字符串)

char * strtok ( char * str, const char * sep );

  • sep参数是个字符串,定义了用作分隔符的字符集合  
  • 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标 记。
  • strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。)
  • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。
  • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标 记。
  • 如果字符串中不存在更多的标记,则返回 NULL 指针。

这个函数什么意思呢?

比如一个字符串为  zpw@bitedu.tech

  我们要拆分为       zpw    bitedu  tech  三个字符串,把@和.作为分隔符 

char arr[] = "zpw@bitedu.tech";const char* p = "@.";

使用这个函数,就会把@改为\0,同时把z的地址返回来

调用一次函数只能切割一次,

strtok有某种记忆的功能,他会记住把分隔符变成\0的位置

怎么使用呢:

#include<string.h>
int main()
{char arr[] = "zpw@bitedu.tech";const char* p = "@.";char buf[1024] = { 0 };strcpy(buf, arr);const char*ret=strtok(arr, p);printf("%s\n", ret);ret = strtok(NULL, p);printf("%s\n", ret);ret = strtok(NULL, p);printf("%s\n", ret);return 0;
}

更加优化的代码:

int main()
{char arr[] = "zpw@bitedu.tech";const char* p = "@.";char buf[1024] = { 0 };strcpy(buf, arr);char* ret = NULL;for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p)){printf("%s\n", ret);}return 0;
}

字符转换函数

int tolower ( int c );//将大写变成小写的函数,如果传入的是小写字母,不受影响

#include<ctype.h>
int main()
{char ch = tolower('Q');putchar(ch);return 0;
}

int toupper ( int c );//将小写变成大写的函数,如果传入的是大写字母,不受影响

#include<ctype.h>
int main()
{char ch = toupper('q');putchar(ch);return 0;
}

如果把一串字符串变成小写,可以使用循环来解决。 

#include<ctype.h>
int main()
{/*char ch = toupper('q');*/char arr[] = "I AM A student";int i = 0;while (arr[i]){if (isupper(arr[i])){arr[i]=tolower(arr[i]);}i++;}printf("%s\n", arr);return 0;
}

isupper     如果他的参数符合下列条件就返回真     判断大写字母A~Z

 其他字符分类函数如下:(返回真是指返回不为0的数)

函数                                             如果他的参数符合下列条件就返回真

 iscntrl                                          任何控制字符

isspace            空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'  

isdigit                                           十进制数字 0~9  

islower                                          小写字母a~z  

isupper                                          大写字母A~Z  

isalpha                                         字母a~z或A~Z  

isalnum                                        字母或者数字,a~z,A~Z,0~9  

 

相关文章:

  • Spring进阶技巧:利用AOP提前介入的巧妙实践
  • uniapp编辑或者添加之后使用navigationBack返回上一页时数据不能更新的问题处理。
  • 零拷贝技术
  • IPv4 和 IPv6 是什么意思?它们之间的区别都有哪些?
  • C语言数据在内存中的存储
  • 【论文精读】DCRNN-扩散图卷积循环神经网络
  • PCL 多边形缩放操作
  • CentOS 7基础操作11_用户账号和组账号概述
  • Ubuntu的启动过程
  • 为何数据仓库需要“分层次”?
  • 常见排序算法,快排,希尔,归并,堆排
  • 免费插件集-illustrator插件-Ai插件-文本对象合并
  • Python爬虫要掌握哪些东西
  • 《手把手教你》系列练习篇之12-python+ selenium自动化测试(详细教程)
  • pottery,一个超酷的 Python 库!
  • “大数据应用场景”之隔壁老王(连载四)
  • 4. 路由到控制器 - Laravel从零开始教程
  • bearychat的java client
  • Js基础知识(一) - 变量
  • MQ框架的比较
  • PAT A1017 优先队列
  • 大数据与云计算学习:数据分析(二)
  • 开源地图数据可视化库——mapnik
  • 利用DataURL技术在网页上显示图片
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端路由实现-history
  • 深度解析利用ES6进行Promise封装总结
  • 使用权重正则化较少模型过拟合
  • 思考 CSS 架构
  • zabbix3.2监控linux磁盘IO
  • ###C语言程序设计-----C语言学习(3)#
  • #APPINVENTOR学习记录
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (java)关于Thread的挂起和恢复
  • (ros//EnvironmentVariables)ros环境变量
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (论文阅读11/100)Fast R-CNN
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)大型网站的系统架构
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Standard 的管理策略
  • .Net 高效开发之不可错过的实用工具
  • .Net 垃圾回收机制原理(二)
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET 中使用 Mutex 进行跨越进程边界的同步