C语言学习(9.字符函数使用)

字符函数

Strlen

size_t strlen(const* str);//size_t ==unsigned int
strlen函数返回的是在字符串中’\0’前面出现的字符个数
参数指向的字符串必须以’\0’结束
注意该函数的返回值是size_t,是无符号的
实现strlen函数的模拟实现

unsigned int my_strlen(const char* str)
{
	assert(str);
	int count = 0;
	while (*str++)count++;
	return count;
}

Strcpy

char* strcpy(char* str1, const char* str2);
源字符串必须以’\0’结束
会将源字符串中的’\0’拷贝到目标空间str1
目标空间str1必须足够大,以确保可以存放源字符串str2
目标空间str1必须可修改
实现strcpy函数的模拟实现

char* my_strcpy(char* str1, const char* str2)
{
	assert(str1 && str2);//判断是否为空指针
	char* cp = str1;
	while (*cp++ = *str2++);
	return str1;//return cp;
}

Strcat

char* strcat(char* str1, const char* str2);
源字符串必须以’\0’结束
目标空间str1必须足够大,以确保可以存放源字符串str2
目标空间str1必须可修改
实现strcat函数的模拟实现

char* my_strcat(char* str1, const char * str2)
{
	assert(str1 && str2);
	char* cp = str1;
	while (*cp) {
		cp++;
	}
	while (*cp++ = *str2++);
	return str1;
}

Strcmp

int strcmp(const char* str1,const char* str2)
用于比较两个字符串并根据比较结果返回整数
若str1=str2,则返回零
若str1<str2,则返回负数
若str1>str2,则返回正数
实现strcmp函数的模拟实现

int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
		{
			return 0;
		}
	}
	if (*str1 > *str2)
	{
		return 1;
	}
	else
	{
		return -1;
	}
}

Strstr

char* strstr(const char* str1,const char*str2)
查找字符串
strstr(str1, str2) 函数用于判断字符串str2是否是str1的子串
如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	char* cp = (char*)str1;
	char* s1, s2;
	if (!*str2)
		return (char*)str1;//判断如果子串为'\0'
	while(*cp)
	{
		s1 = cp;
		s2 = (char*)str2;
		while (*s2 && !(*s1 - *s2))
		{
			s1++; s2++;
		}
		if (!*s2)
		{
			return cp;//找到子串
		}
		cp++;
	}
	return NULL;//找不到子串
}

Strtok

char* strtok(char* str,const char* sep)
分解字符串为一组字符串。
str为要分解的字符串,其中有多个分隔符
sep为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)
strtok()在参数str的字符串中发现参数sep中包含的分割字符时, 则会将该字符改为\0 字符。返回一个指向这个标记的指针。
首次调用时,str指向要分解的字符串首元素,之后再次调用要把str设成NULL。存放下一个标记处地址
如果字符串中没有更多的标记,则返回NULL
strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。所以使用该函数的时候需要拷贝一份

使用方式
p = strtok(test1, ",");
while(p)
 {   
	printf("%s\n", p);
	p = strtok(NULL, ",");     
 }
for (p = strtik(text1, ","; p != NULL; strtok(NULL, ",")
 {
	 printf(printf("%s\n", p);
 }//if也可以

Strerror

char* strerror(int err)
返回错误码所对应的错误信息
err是错误码
#include<errno.h>//头文件可以使用errno变量
strerror(errno);
errno是一个全局的错误码变量
当c语言库函数执行时发生错误,就会把对应的错误码,赋值到errno中

字符分类函数

每个分类函数接受一个包含字符值的整型参数。
函数测试这个字符并返回一个整型值
(注意!标准并未指定任何特定值,所以有可能返回任何非零值。)

函数 如果它的参数符合下列条件就返回真
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,换页‘\f’,换行’\n’,回车’\r’,制表符’\t’,或垂直制表符’\v’
isdight 十进制数字0~9
isxdight 十六进制数字,包括所有十进制数字,小写字母a~f, 大写字母A~F
islower 小写字母a~z
isupper 大写字母A~Z
isalpha 字母az或AZ
isalnum 字母或数字az,AZ或0~9
ispunct 标点符号,任何不属于数字或字母的图像字符(可打印符号
isgraph 任何图像字符
isprint 任何可打印字符,包括图像字符和空白字符

字符转化函数

转换函数把大写字母转换为小写字母或者把小写字母转换为大写字母。
int tolower(int ch);
int toupper(int ch);
toupper 函数返回其参数的对应大写形式,tolower函数返回其参数对应的小写形式。
如果函数的参数并不是处于适当大小写状态的字符(即toupper的参数不是小写字母或tolower的参数不是大写字母),函数将不修改参数直接返回。

(int ch);
int toupper(int ch);
toupper 函数返回其参数的对应大写形式,tolower函数返回其参数对应的小写形式。
如果函数的参数并不是处于适当大小写状态的字符(即toupper的参数不是小写字母或tolower的参数不是大写字母),函数将不修改参数直接返回。
返回顶部

上一篇:用Java VisualVM配合Jstatd远程监控Java服务(ubuntu)


下一篇:2022.3.1.03.