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个字符,留一个给\0
	scanf("%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个字符,留一个给\0
	scanf("%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个字符,留一个给\0
	scanf("%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个字符,留一个给\0
	scanf("%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!!!!!!

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值