Tiny Spark get dazzling some day.

目录

1.字符函数1.1 字符分类函数1.2 字符转换函数

2. 字符串函数2.1 strlen2.2 strcpy2.3 strcat2.4 strcmp2.5 strncpy2.6 strncat2.7 strncmp

1.字符函数

1.1 字符分类函数

字符分类函数,通常用来判断 目标字符 是什么类型 的字符。 如果字符不是该类型,返回 假(0);字符是该类型, 返回 真(非0值)。 在使用 该类函数前需要包含头文件:

函数函数返回 真 的参数条件范围iscntrl任何控制字符isspace空白字符,如空格,换页 ‘\f’,换行 ’\n’,回车 ‘\r’ 和 制表符 ‘\t’isdigit十进制数字 0 ~ 9isxdigit十六进制数字,包括十进制数字0 ~ 9,小写字母 a ~ f,大写字母A ~ Fislower小写字母 a ~ zisupper大写字母 A ~ Zisalpha英文字母 a ~ z,A ~ Zisalnum数字 0 ~ 9 或 字母 a ~ z, A ~ Zispunct标点符号, 任何不属于 数字 或 字母 的可打印图形字符isgraph任何图形字符isprint能打印的字符都可以,包括 空白字符 和 图形字符

1.2 字符转换函数

C语言提供了 2 个字符转换参数:

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

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

这里 参数c 的变量类型为 int,是指 c 是要 转换/强制转换 为 int 或 EOF 的字符。

同样的他们也需要包含头文件: 所以,在需要将一个英文字母 从 大写(小写)转为 小写(大写)时,除了让字符 +(-)32 方法外, 也可以使用 tolower(toupper)函数

#include

#include

int main()

{

char ch = 'A';

printf("%c %c", ch, tolower(ch));// 结果就是 A a

return 0;

}

2. 字符串函数

接下来为字符串函数,用于处理字符串的计算,复制等,需要包含头文件

2.1 strlen

函数原型:

size_t strlen ( const char* str );

strlen 用来计算字符串长度的函数,它以 ’ \0 ’ 为结束标志,返回结束之前出现的字符个数, 但它计算的时候不会将 ’ \0 ’ 算进来。

注意! 它的 返回类型 是 size_t , 是 无符号整型 ,在用占位符时要用 %zd 。

函数使用:

char str[] = "ShowTime!";

printf("%zd", strlen(str));// 结果就是 8个字母 + 1个感叹号 == 9

我们用 指针 的方式来模拟一下 strlen 函数:

int Sim_strlen(char* s)

{

assert(str);

char* p = s;

while(*p != '\0')// 当指针 p 走到 '\0'的时候停下

p++;

return p - s;// |指针-指针| = 他们之间的元素数目

}

2.2 strcpy

函数原型:

char* strcpy( char* destination, const char* source );

目标空间 源字符串

strcpy 用来将一个字符串(源)的内容 拷贝到 另一个空间(目标)上。

规则: 1.在源字符串中 必须 以 ’ \0 ’ 为结束,再拷贝的时候也会把这个 ’ \0 ’ 拷贝过去。 2.目标空间必须 足够大(够放源字符串就行,注意有 ’ \0 ’ 要多算一个)而且空间 可以修改。

函数使用:

char dest[10] = "";

char src[10] = "ShowTime!";// 这里源字符串也可以写为常量的 char* src = "ShowTime!";

strcpy(dest, src);// 此时 dest 的内容就是 "ShowTime!"

函数的模拟实现:

char* Sim_strcpy(char* dest, const char* src)

{

char *ret = dest;

assert(dest != NULL);

assert(src != NULL);

// 先检验 dest 和 src 是否为空指针

while((*dest++ = *src++))// 拷贝值的同时又在下次 指向下一个字符(空间)的地址

{

;

}

return ret;

}

2.3 strcat

函数原型:

char* strcat ( char* destination, const char* source );

目标空间 源字符串

strcat 用来将一个字符串(源)的内容 接在 另一个空间(目标)字符串内容的后面。

规则:

源字符串 必须 以 ’ \0 ’ 结束。目标字符串中也 必须 有 ’ \0 ',函数哥们它至少得知道从哪开始吧。目标空间必须足够大(能容纳 源字符串的内容+目标字符串的内容),而且空间 可以修改 。

函数使用:

char dest[12] = "Whatcan";// 这里要注意目标空间要留有足够剩余空间放源字符串的数据

char src[] = "Isay";

strcat(dest, src);// 此时 dest 的内容就是 "WhatcanIsay" 没有 out 不好意思

函数的模拟实现:

char* Sim_strcat(char* dest, const char* src)

{

char* ret = dest;

assert(dest != NULL);

assert(src != NULL);

// 先检验 dest 和 src 是否为空指针

while(*dest)

{

dest++;

}// 先让指针指向目标字符串的'\0'结束位置,作为函数的起始位

while((*dest++ = *src++))// 拷贝值的同时又在下次 指向下一个字符(空间)的地址(跟strcpy一样)

{

;

}

return ret;

}

所以 strcpy 和 strcat 是有相似的, strcpy 更多的是字符串往 全空的空间 拷贝过去, 而 strcat 则是在 原有的基础上,往原有内容后 空的空间拷贝过去。

2.4 strcmp

函数原型:

int strcmp ( const char* str1, const char* str2 );

strcmp函数用于比较两个字符串的大小。

注意 !该函数比较的不是字符串的 长度 !而是比较字符串第一个 相同位置 的不同字符所对应的 ASCII码值的大小 ! 规则:

第一个字符串 大于 第二个字符串,则返回值 大于0第一个字符串 等于 第二个字符串,则返回值 等于0第一个字符串 小于 第二个字符串,则返回值 小于0

函数使用:

char* str1 = "ABCDE";

char* str2 = "ABCDF";

int res = strcmp(str1, str2);// res == -1

首先,str1 和 str2 的前四个字符ABCD相同,只需比较 E 和 F ,对应的 ASCII 码表值 E 比 F 小。 所以, 函数返回值 小于0, res == -1 < 0。

函数的模拟实现

int Sim_strcmp (const char* str1, const char* str2)

{

assert(str1 != NULL);

assert(str2 != NULL);

//先检验 str1 和 str2 是否为空指针

while(*str1 == *str2)

{

if(*str1 == '\0')

return 0;

str1++;

str2++;

}

return *str1 - *str2;

}

2.5 strncpy

-函数原型:

char* strncpy ( char* destination, const char* source, size_t num );

目标空间 源字符串 拷贝数目

跟函数 strcpy 作用类似,strncpy 也用来将一个字符串(源)的内容 拷贝到 另一个空间(目标)上,但是多规定了拷贝数目。

规则:

拷贝 num 个字符串从源字符串到目字符串标空间。如果源字符串的长度 小于num,则拷贝完字符串之后,在目标的后面追加 0,直到 num 个。strncpy 不会将 ’ \0 ’ 复制过去

函数使用

char dest[10] = "";

char src[10] = "HElloWorld";

int num = 5;

strncpy(dest, src, num);// 此时 dest 的内容就是 "Hello", 后面的 "World" 不会复制过来

函数的模拟实现

char* Sim_strncpy(char* dest, const char* src, size_t num)

{

char* ret = dest;

assert(dest != NULL);

assert(src != NULL);

while (num--)

{

*dest = *src;

dest++;

src++;

}

return ret;

}

2.6 strncat

函数原型:

char* strncat ( char* destination, const char* source, size_t num );

目标空间 源字符串 拷贝数目

跟函数 strcat 作用类似,strncat 也将一个字符串(源)的内容 接在 另一个空间(目标)字符串内容的后面,但是多规定了拷贝数目。

规则:

将源字符串的前 num 个字符追加到 目标空间 的字符串末尾,再追加⼀个 ‘\0’ 字符。如果源字符串的长度 小于num 的时候,只会将字符串中到 ’ \0 * 的内容追加到 目标空间的字符串末尾。

函数使用:

char dest[40] = "This book belongs to the "; // 这里要注意目标空间要留有足够剩余空间放源字符串的数据

char* src = "Half Blood Prince";

int num = 4;

strncat(dest, src, num);// 此时 dest 的内容就是 "This book belongs to the Half"

函数的模拟实现

char* Sim_strncat(char* dest, char* src, int num)

{

char* ret = dest;

while (*dest)

{

dest++;

}

while (num--)

{

*dest = *src;

dest++;

src++;

}

return dest;

}

2.7 strncmp

函数原型:

int strncmp ( const char* str1, const char* str2, size_t num );

跟函数 strcmp 作用类似,strncmp作用比较两个函数的前 num 个字符。

再次注意 !该函数与函数 strcmp 一样,比较的不是字符串的 长度 !而是比较字符串第一个 相同位置 的不同字符所对应的 ASCII码值的大小 ! 规则:

第一个字符串 大于 第二个字符串,则返回值 大于0第一个字符串 等于 第二个字符串,则返回值 等于0第一个字符串 小于 第二个字符串,则返回值 小于0

函数使用:

char* str1 = "ABCDX";

char* str2 = "ABCDY";

int num = 4;

int res = strncmp(str1, str2, num);

尽管 str1 和 str2 比较 X 和 Y 不同,str2 是应该大于 str1的,可我们只比较前 4 个字符,str1 和 str2 前个字符都是相同的ABCD,所以 str1等于str2, 函数返回值为 0, res == 0。

        Stay hungry. Stay Foolish. 饥渴求知,虚怀若愚。   感谢各位读者支持,虚心请教,如有错漏或可改进点,请任意指出,感激不尽!   一起进步!

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。