首页 > 编程知识 正文

连接字符串的函数,字符串赋值的库函数

时间:2023-05-06 09:28:54 阅读:170915 作者:1921

文章目录字符串库函数字符串库函数strlen函数strcpy函数strcat函数strcmp函数strncpy函数strncat函数strncmp函数strstr函数strtok函数

字符串库函数

在c语言中字符串的处理很频繁。 例如,要设计用户需要登录的系统,必须输入用户名和密码。 判断用户名和密码需要字符串的处理。 但是,C语言没有字符串类型,将字符串放入常量字符串或字符数组中。 所以有一些库函数来操作我们的字符串。 例如char* a=“abcdef”; 的形状为常量字符串,不能更改常量字符串。 char arr[]='abcdef '; 这种形式是字符数组,相当于字符串,与常量字符串的区别在于这样创建的字符串是可以改变的。

字符串库函数也有很多介绍字符串的库函数,具体功能如下。

strlen//strlen函数用于获取字符串的长度size_tstrlen(constchar*str )。 //# include stdlib.hint main ({ char str [ ]=' abcdef '; intlen=strlen(str; //len的值为6 return 0}字符串以“”为结束标志,strlen函数返回字符串“”之前出现的字符数。 不包含“”。 参数指向的字符串必须以“”结尾。 注意函数的返回值为size_t,后跟无符号数

size_tmy_strlen(constchar*str ) assert ) str ); size_t count=0; wile(str ) ) { count; }返回计数; }//strlen有多种实现方式,但对于strcpy函数//strcpy函数用于将一个字符串复制到另一个字符串空间的char*strcpy(char*dest,const char* src ) //语法#includestdlib.hint main () charstr1(20 )={0}; char* str2='i love ybb '; strcpy(str1、str2; printf('%s ',str1); //此处的输出为:i love ybb return 0; }源字符串以“”结束时,将源字符串“”复制到目标空间的目标空间必须足够大,以便可以存储源字符串的目标空间必须可变且相同。 还实现strcpy函数

char*my_strcpy(char*des,const char* sour ) {assert; 资产(sour ); char* ret=des; wile(*des=*sour ); }return ret; } strcat函数//strcat函数的作用是将一个字符串添加到另一个字符串的char*strcpy(char*dest,const char* src ); //语法# include stdlib.h # include stdio.hint main () { char str1[20]='abc '; char* str='def '; strcat(str1、str2; printf(%s(n ),str1); //此处的输出为abcdef return 0; }源字符串以“0”结尾的目标区域必须足够大,以允许存储源字符串的内容目标区域更改strcat函数的实现

char*my_Strcat(char*dest,const char* sour ) (assert ) destsour ); char* ret=dest; //找到目标0while () dest!=' ' ) {dest; 将sour字符串添加到dest的while(*dest=*sour ); }return ret; } strcmp//strcmp函数的作用是比较两个字符串是否相等。 如果等于,则返回0//;如果第一个字符串大于第二个字符串,则返回大于0的数字;否则,返回小于0的intstrcmp(constchar*str1,const char* str2)//语法inst char* str2='abcdef '; intret=strcmp(str1,str2); if(0==ret ) { printf (等于(n ); (else ) printf ) )不相等(n ); } return 0; } strcmp函数的实现

intmy_strcmp(constchar*str1,const char* str2) {assert

(str1 && str2);while (*str1 == *str2) {if ('' == *str1)return 0;str1++;str2++;}return *str1 - *str2;}

以strcpy为例,上面这些函数都能对整段字符串进行操作。那如果我们想把一个字符串的前面几个字符拷贝到目的空间,怎么办呢。于是就出现了strncpy函数。strncpy函数比strcpy函数要多一个参数,就是我们想要拷贝的字符个数

strncpy函数 // strncpy函数同样是字符串拷贝的函数,区别是我们可以拷贝一部分字符到目标空间,而不是将整个字符串拷贝过去char* strncpy(char* dest, const char* src, size_t num);// 语法int main(){ char str1[20] = "XXXXXXXXXXXX"; char* str2 = "abcd"; strncpy(str1, str2, 3); printf("%sn", str1);// 此处的输出为:abcdXXXXXXXX return 0;} 拷贝num个字符从源字符串到目标空间如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,知道num个

strncpy函数的实现

char* my_strncpy(char* dest, const char* sour, size_t n) {assert(dest && sour);int i = 0;while (i < n) {if ('' == *sour) {*dest = '';}else {*dest = *sour;}dest++;sour++;i++;}} strncat函数 // strncat函数的作用是将源字符串中的前num个字符追加到目标空间char* strncat(char* dest, const char* src, size_t num);// 语法#include<stdio.h>#include<stdlib.h>int main(){ char str1[20] = "abcd"; char* str2 = "efghfsd"; strncpy(str1, str2, 3); printf("%sn", str1); // 此处的输出是:abcdefgh return 0;} 如果我们输入的num超过了源字符串的长度,strncpy函数只会将源字符串全部追加到目标空间追加完后,strncpy函数会在末尾放入一个''

strncat函数的实现

char* my_strncat(char* dest, const char* src, size_t n) {assert(dest && src);char* ret = dest;// 找到dest的''所在的位置while (*dest != '') {dest++;}// 把src的前n个字符拷贝到dest中while (n--) {if ('' == *src) {*dest = '';break;}*dest++ = *src++;}*dest = '';return ret;} strncmp函数 // 比较字符串的前num个字符是否相等int strncmp(const char* str1, const char* str2, size_t num);// 语法#include<stdio.h>#include<stdlib.h>int main(){ char* str1 = "abcdefgh"; char* str2 = "abcdddddd"; int ret = strncmp(str1, str2, 4); if(0 == ret){ printf("前4个字符相等n"); }else{ printf("不相等n"); } return 0;} 比较到出现一个字符不一样或者一个字符串结束或者num个字符全部比较完

strcmp函数的实现

int my_strncmp(const char* str1, const char* str2, size_t n) { assert(str1 && str2);while (n--) {if ('' == *str2) {return 0;}if (*str1 && *str2 && *str1 == *str2) {str1++;str2++;}else {return *str1 - *str2;}}} strstr函数 // strstr函数是判断str2是否为str1的子串,如果是则返回str2在str1中第一次出现的位置char* strstr(const char* str1, const char* str2);#include<stdio.h>#include<stdlib.h>int main(){ char* str1 = "abbbbbcde"; char* str2 = "bbc"; char* ret = strstr(str1, str2); if(ret != NULL){ printf("str2是str1的子串n"); }else{ printf("str2不是str1的子串n"); } return 0;}

strstr函数的是实现

char* my_strstr(const char* str1, const char* str2) {assert(str1, str2);char* s1 = NULL;char* s2 = NULL;char* cp = str1;while (*cp) {s1 = cp;s2 = str2;while (*s1 == *s2) {s1++;s2++;}if ('' == *s2) {return cp;}cp++;}return NULL;} strtok函数 // strtok函数的作用是将字符分割成几段char* strtok(char* str, const char* sep); sep参数是个字符串,定义了用作分隔符的字符集合第一个参数指定一个字符串,它包含了0个或多个由sep字符串中一个或多个分隔符的标记strtok函数找到str中的下一个标记,并将其用 结尾,返回一个指向这个标记的指针。(注:strtok函数会改 变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。如果字符串中不存在更多的标记,则返回NULL 指针。 // 用法int main() {char arr[] = "123456@qq.com";char arr2[20] = { 0 };strcpy(arr2, arr);char* ret = NULL;for (ret = strtok(arr2, "@."); ret != NULL; ret = strtok(NULL, "@.")) {printf("%sn", ret);}return 0;}

记,strtok函数将保存它在字符串中的位置

strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。如果字符串中不存在更多的标记,则返回NULL 指针。 // 用法int main() {char arr[] = "123456@qq.com";char arr2[20] = { 0 };strcpy(arr2, arr);char* ret = NULL;for (ret = strtok(arr2, "@."); ret != NULL; ret = strtok(NULL, "@.")) {printf("%sn", ret);}return 0;}

— — end

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。