Bootstrap

《重生到现代之从零开始的C语言生活》—— 字符函数和字符串函数

字符函数和字符串函数

字符分类函数

大家知道字符是分为很多种类型的
就比如说’a’ ‘1’ 'A’等等,所以我们需要一种函数来完成字符函数的分类
这就是字符分类函数

函数需要包含头文件<ctype.h>

函数的运行规则是:如果符合下列参数就返回真

  • inscntrl(控制任何字节)
  • isspace(空白字符:空格,\f,\n,\r,\t,\v)
  • isdigit(十进制数字’0’~'9’字符)
  • isxdigit(十六进制数字,包括十进制狮子字符,小写字母a~f,大写字母A到F)
  • islower(小写字母a~z)
  • isupper(大写字母A~Z)
  • isalnum(字母或者数字)
  • ispunct(标点符号,任何不属于数字或者字母的图形字符)
  • isgraph(任何图形字符)
  • isprint(任何可以打印字符,包括图形字符和空白字符)

我们该怎么使用这些函数呢?

int isupper(int c )

函数就是判断参数部分的c是否是大写字母
如果是大写字母,就返回非零的整数,如果不是大写,则返回0

字符转换函数

什么是字符转换函数呢?

就是可以将字符之间完成转换

int tolower (int c);//将参数传进去的大写字母转小写
int toupper (int c);//将参数传进去的小写字母转大写

细讲strlen函数

之前我们了解过strlen函数,是用来统计字符个数的

现在我们来细讲一下

strlen函数的形式

size_t strlen(const char *str);

就是说返回值是size_t,如果我们想储存他的结果,就是需要size_t类型的变量来储存值得注意的是size_t是无符号的,就是没有正负之分

我们来模拟一下strlen函数,更好的理解他

#include <stdio.h>
size_t m_strlen(char *p)
{
	size_t con = 0;
	while (*p)
	{
		p++;
		con++;
		
	}return con;


}
int main()
{
	char arr[6] = "abcde";
		size_t a = m_strlen(arr);
		printf("%zd", a);


	return 0;
}

strcpy

strcpy就是将源字符串中的代码拷贝到目标字符串

char * strcpy(char *p,const char * pp);

其中,p是目标字符串,pp是源字符串

运行过程是:strcpy将目标字符串与原字符串一一替换,直到替换到源字符串的/0部分
前提条件是目标函数的容量一定要足够大,起码要放的下源字符串

那就模拟一下strcpy函数

#include<stdio.h>
void m_strcpy(char* p, char* pp)
{
	while (*p = *pp)
	{
		*p++;
		*pp++;
		if (*pp == '\0')
		{
			//for循环一个字符打印后面的字符
			break;
		}
	}



}
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "efg";
	m_strcpy(arr1, arr2);
	printf("%s", arr1);


	return 0;
}

strcat

strcat函数的用法是:将源函数追加到目标函数后面。细节如下:

  • 源字符串必须以\0结尾,因为追加的时候目标函数的\0会被取代,如果没有则追加后的函数将没有\0
  • 目标字符也必须有\0,因为如果没有就不知道从哪里追加
  • 目标函数的空间必须足够大,不然会溢出

那我们就再模拟一下strcat函数:

#include<stdio.h>
void m_strcat(char* a, char* b)
{
	char** p = b;
	while (*a != '\0')
	{
		a++;
	}
	while (*b != '\0')
	{
		*a = *b;
		a++;
		b++;
	}
	*++a = *++b;
}
int main()
{
	char arr1[10] = "abcd";
	char arr2[] = "aaa";
	m_strcat(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

strcmp

strcmp就是将两个字符串中的每个字符进行比较

  • 如果第一个字符串大于第二个字符串,则返回大于零的数字
  • 第一个字符串等于第二个字符串,则返回零
  • 第一个字符串小于第二个字符串,则返回小于零的数字

而判断两个字符串的大小是相同位置的ASCII码值,将两个字符串同位置的字符一个一个的比较,直到比较出不相同的一个字符,如果都相同,那么返回0

strn系列

其实字符函数还有strncpy,strncat,strncmp,他们与前面说的strcpy,strcat,strcmp都有一点的不同,那么不同的点是什么呢?
那就是在传参时,后面要多加一个size_t num

  • strncpy:char * strncpy ( char * destination, const char * source, size_t num );
  • strncat :char * strncat ( char * destination, const char * source, size_t num );
  • strncmp:int strncmp ( const char * str1, const char * str2, size_t num );

后面的size_t num的意思都是,最多操作多少个字符

假如说strncpy的后面传参的num是3,意思是只3拷贝3个字符,其他的函数的意思也基本一致。

strtok函数

strtok函数起摘取作用,就是将一个字符串中用特定字符串分割的函数将分割的部分都摘取出来
strtok的表现形式

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

实参sep指向了一个字符串,定义了分割字符的集合


今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)

;