字符串相关库函数的使用与注意事项 | 您所在的位置:网站首页 › 库函数代码 › 字符串相关库函数的使用与注意事项 |
今日份学习“相关字符串的库函数” 前言:文章详细介绍C语言中的哪些库函数主要对字符串进行操作,以及作者将会得这些函数一一的进行分析讲解这些函数是如何实现的,使用这些函数的注意事项有什么,应对什么情景使用哪些函数。 一,函数分类这些函数都被包含在的头文件中 且可分成以下几类: 1.求字符串长度函数:strlen 2.长度不受限制的字符串函数:strcpy,strcat,strcmp 3.长度受限制的字符串函数:strncpy,strncat,strncmp 4.字符串查找:strstr,strtok 二,函数介绍1.求字符串长度函数:strlen功能:求出一串字符串的长度。 格式:size_t strlen(const char* string) 解析:strlen函数返回值是"size_t"(无符号整数),其参数为"const char*"字符指针,接收字符变量的地址并以const的修饰(以免在函数内部修改原来的值) 思路:①字符串以‘\0’作为结束标志,strlen函数计算字符串'\0'前的字符个数,且不包含'\0'。 ②参数指向的字符串必须要以'\0'结束 注意:函数的返回值为size_t的无符号数(易错) 运用方式: #include #include int main() { char arr[]="abcdefgh";//创建一个字符数组 int len=0;//存长度 len=strlen(arr);//将该数组代入strlen函数中计算长度并赋给变量len printf("%d\n",len);//打印该数组长度 return 0; }简简单单~~ 自主实现: 光知道用可不行,别人有的咱也得有。 按照上面思路~每个字符串都是以'\0'结束,且不包含‘\0’,我们可以利用循环一个字符一个字符遍历并计数,直到遇到'\0'停止,就能求出该字符串的长度。 废话不多说上代码: size_t my_strlen(const char* p) { size_t len=0;//存储长度 //循环遍历 while(*p)//因为字符串结束标志为'\0'且代表条件为假 { len++;//进入一次循环计数一次 p++;//并使指针走向下一个 } return len;//返回长度 }还是不难的,利用'\0'的结束标志做为循环的结束条件就能很算出字符的长度 简化代码: 只要我们对代码够熟练,理解的够深,就能省略很多步骤。 size_t my_strlen(const char* p) { size_t len=0;//存储长度 //循环遍历 while(*p++)//因为字符串结束标志为'\0'且代表条件为假 { len++;//进入一次循环计数一次 } return len;//返回长度 }实际效果: 开胃小菜 ~拿下!😁 2.长度不受限制的字符串函数:strcpy,strcat,ctrcmp这里的长度不受限制的意思是:利用这些函数操作字符串的字符是不受限制的,字符串有多少字符就操作多少字符,这就是长度不受限制的字符串函数。 OK接下来我们开始一一把它们拿下! strcpy函数:字符串拷贝功能:拷贝一串字符。 格式:char* strcpy(char* destination,const char* source) 解析:strcpy函数返回值是"char*"(字符指针):返回目的地的地址,其参数为"char* destination"的字符指针:该参数作为拷贝字符串的目的地。参数”const char* source“的字符指针:该参数作为拷贝字符串的源。 总的意思:将源地址的字符串拷贝到目的地地址的空间里 思路:①字符串以‘\0’作为结束标志 ②将源地址的字符串包括'\0'拷贝到目的地空间。 注意:1,目的地的空间必须足够大,以确保能存放源字符串。 2,目的地空间必须可变(注意被const修饰的目的地地址空间) 运用方式: #include #include int main() { char arr1[]="abcdefgh";//创建一个字符数组 char arr2[20];//创建目的地空间的字符数组 strcpy(arr2,arr1);//将arr1数组作为源,将arr2数组作为目的地 printf("%s\n",arr2);//检验arr2数组的内容 return 0; }看起来很方便~ 自主实现: 按照上面的思路,实现自己的strcpy函数 同样是将'\0'作为核心条件。'\0'也要将其拷贝上 上代码: void my_strcpy(char* dst,const char* src) { if(*src=='\0')//确保源地址有字符 { return; } while(*src!='\0')//将源字符作为循环条件,直到拷贝'\0'字符 { *dst=*src; dst++; src++; } //上面的循环只将'\0'前的字符拷贝了,但没有拷贝'\0'。 *dst=*src;//将'\0'拷贝 }写代码不可操之过急,记得最后将'\0'补充过去~~ 简化代码: 看我神来一手: char* my_strcpy(char* dst,const char* src) { if(*src=='\0')//确保源地址有字符 { return; } char* ret=dst;//记录目的地的起始地址 while(*dst++=*src++)//将赋值和自增都在判断中进行,同样也能将'\0'拷贝过去 { ; } return dst;//返回目的地的起始位置 }实际效果: 小case~~😜 strcat函数:字符串追加功能:追加一串字符。 格式:char* strcat(char* destination,const char* source) 解析:strcat函数返回值是"char*"(字符指针),其参数为"char* destination"的字符指针:该参数作为追加字符串的目的地。参数”const char* source“的字符指针:该参数作为追加字符串的源。(类似strcpy) 总的意思:将源地址的字符串追加到目的地地址的空间里 思路:①首先确定目的地第一个'\0'字符的位置 ②将源地址的字符串包括'\0'从目的地第一个'\0'字符开始追加。 注意:1,目的地的空间必须足够大,以确保能存放源字符串。 2,目的地空间必须可变(注意被const修饰的目的地地址空间) 运用方式: #include #include int main() { char arr1[]="Word";//创建一个字符数组 char arr2[20]="Hello ";//创建目的地空间的字符数组 strcat(arr2,arr1);//将arr1数组作为源,将arr2数组作为目的地 printf("%s\n",arr2);//检验arr2数组的内容 return 0; }GOOD 自主实现: 按照上面的思路,同样实现自己的strcat函数 同样是将'\0'作为核心条件。'\0'也要将其追加上 第一步先找到目的字符第一个'\0'处,再将源字符加上后面的'\0'一同追加到目的地空间中 上代码: char* my_strcat(char* dst,const char* src) { if(*src)//如果源字符没有字符则直接结束 return; char*ret=dst;//保存目的地的起始地址 while(*dst)//找到目的地的第一个'\0' { dst++; } while(*src!='\0')//将源字符作为循环条件,直到追加到'\0'字符 { *dst=*src; dst++; src++; } //上面的循环只将'\0'前的字符追加了,但没有追加'\0'。 *dst=*src;//将'\0'追加 return ret;//返回目的地的起始位置 }尝试一下: #include char* my_strcat(char* dst,const char* src) { if(*src=='\0')//如果源字符没有字符则直接结束 return; char*ret=dst;//保存目的地的起始地址 while(*dst)//找到目的地的第一个'\0' { dst++; } while(*src!='\0')//将源字符作为循环条件,直到追加到'\0'字符 { *dst=*src; dst++; src++; } //上面的循环只将'\0'前的字符追加了,但没有追加'\0'。 *dst=*src;//将'\0'追加 return ret;//返回目的地的起始位置 } int main() { char arr1[]="My Word"; char arr2[20]="Hello "; my_strcat(arr2,arr1);//尝试我们的函数 printf("%s\n",arr2); return 0; }把握住细节还是难不倒我们的😃 进击下一个 💪 strcmp函数:字符串比较功能:比较两个字符串的大小。 格式:int strcmp(const char* str1,const char* str2) 解析:strcmp函数返回值是"int"(整型)其参数为"char* str1"和“char* str2”的字符指针:将str1地址的字符串于str2地址的字符串相比较,若st1的字符串大则返回值返回大于0的值,小则返回小于0的值,相等则返回0 总的意思:将str1地址的字符串与str2地址的字符串相比较,根据返回值确定两个字符串的大小。 思路:①字符串以‘\0’作为结束标志 ②将两个字符串的第一个字符相比较,如果相等则同步进行下一个字符的比较,如果不相等则返回两个字符相减的ASCLL的值。③当两个字符串都进行'\0'字符的比较时说明该两个字符串相等 注意:1.在函数内部使其参数修饰成不可更改性 2.确保实参有参数 运用方式: #include #include int main() { char arr1[]="Word";//创建字符数组 char arr2[]="Hello";//创建字符数组 int Max=0;//接收返回值 Max=strcmp(arr1,arr2);//将arr1与arr2数组进行比较,返回值有Max接收 if(Max>0)//进行判断 printf("arr1>arr2"); else if(Max 0)//进行判断 printf("arr1>arr2"); else if (Max < 0) printf("arr1arr2"); else if(Max 0)//进行判断 printf("arr1>arr2"); else if (Max < 0) printf("arr1 |
CopyRight 2018-2019 实验室设备网 版权所有 |