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

50.【C语言】字符函数和字符串函数(上)

1.字符分类函数

*ctype.h

ctype.h

*简单使用

cplusplus对ctype.h的介绍 点我跳转
islower为例,需要它的返回值来判断

格式islower('字符');

翻译:

如果c确实是小写字母,返回一个不是0的值,否则返回0

#include <stdio.h>
#include <ctype.h>
int  main()
{int ret=islower('a');printf("%d",ret);return 0;
}

*例题

将字符串的所有小写字母转大写字母

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
int  main()
{char arr[200] = { 0 };//最大199个字符,留一个给\0scanf("%s", arr);for (int i = 0; i < 200; i++){if (islower(arr[i])){arr[i] -= 0x20;}if (0 == arr[i]){break;}}printf("%s", arr);return 0;
}

2.字符转换函数

*格式

int tolower ( int c ); //将参数传进去的大写字母转小写,否则无动作

int toupper ( int c ); //将参数传进去的小写字母转大写,,否则无动作

显然tolower和toupper自动带判断大小写

因此上方的代码还有第二种写法

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
int  main()
{char arr[200] = { 0 };//最大199个字符,留一个给\0scanf("%s", arr);for (int i = 0; i < 200; i++){//返回值传给arr[i],不可直接写成toupper(arr[i]);这样返回值传不了!!!arr[i]=toupper(arr[i]);if (0 == arr[i]){break;}}printf("%s", arr);return 0;
}

3.字符串函数

先包含头文件string.h

*strlen

20.5.【C语言】求长度(sizeof和strlen)的两种方式 点我跳转

在上方给的文章的基础上延伸

strlen:从给定的位置开始,向后统计\0以前的字符个数

如stlren(arr+1);从arr[1]开始,向后统计\0以前的字符个数

*例题(易错)

求下列代码的运行结果

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = { "abcdef" };char arr2[] = { "abc" };if (strlen(arr2) - strlen(arr1) > 0){printf("正数");}else{printf("负数或0");}return 0;
}

意料之外输出正数?!

分析:

之前讲过strlen返回类型为size_t为无符号整数

3-6=-3,但计算机按无符号整数理解,也就不存在符号位,为正

如果要比较字符串的大小如何改进?

改法1

if (strlen(arr2) > strlen(arr1) )

改法2强制类型转换

if ((int)strlen(arr2) > (int)strlen(arr1) )

4.模拟实现strlen函数

三种方法

01.用指针遍历

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
size_t sim_strlen(char* str)
{size_t CX = 0;while (*str)//如果解引用后不为\0则执行循环{str++;//指针移动CX++;//计数}return CX;
}int main()
{char arr[200] = { 0 };//最多199个字符,留一个给\0scanf("%s", arr);size_t sum = sim_strlen(arr);printf("%zd", sum);return 0;
}

02.指针-指针

指针-指针是指针之间的元素个数,则返回指针-指针即可

对上方的代码稍作修改

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
size_t sim_strlen(char* str)
{char* begin = str;while (*str)//如果解引用后不为\0则执行循环{str++;//指针移动}return str-begin;//返回指针-指针,即指针之间的元素个数
}int main()
{char arr[200] = { 0 };//最多199个字符,留一个给\0scanf("%s", arr);size_t sum = sim_strlen(arr);printf("%zu", sum);return 0;
}

03.递归

递归复习见:35.【C语言】详解函数递归

sim_strlen的递归过程:

转为代码:

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
size_t sim_strlen(char* str)
{//一定注意是\0不是字符0!!!!!!if (*str == '\0'){return 0;}else{return (1 +sim_strlen(str+1));}
}int main()
{char arr[200] = { 0 };//最多199个字符scanf("%s", arr);size_t sum = sim_strlen(arr);printf("%zu", sum);return 0;
}

在if判断处,一定注意是\0不是字符0!!!!!!


http://www.mrgr.cn/news/25113.html

相关文章:

  • 基于vue框架的宠爱有佳宠物医疗管理系统4x10z(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 前端面试常见手写题
  • Unity Apple Vision Pro 开发(十):通过图像识别锚定空间
  • 怎么设置电脑禁止访问网页/网站?一分钟教你五个方法,实现网站访问黑名单,让员工专注力满满!
  • Linux创建虚拟磁盘并分区格式化
  • 无人机低空安全管控系统技术详解
  • JDBC API详解一
  • 宏任务和微任务+超全面试真题
  • 时尚穿搭想换就换,各种风格一键完美搭配!亲测在线虚拟试衣换装平台效果超赞!
  • 一些了解WEB API的相关知识点的学习
  • [产品管理-9]:NPDP新产品开发 - 7 - 战略 - 愿景、使命、价值观的区别
  • 亚信软件测试实习面试记录
  • R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析
  • QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期]
  • 光影漫游者:全球音乐厅建设的创新先锋—轻空间
  • 基本输入与输出
  • Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机接口数据吞吐量(C语言)
  • UEFI学习笔记(六):EDK II 模块:Libraries,DriversApplication
  • 牛客小白月赛99(上)
  • 辛巴赔付到账,罗永浩退一赔三:直播带货终于往好方向卷了下…