1.函数介绍 strcat函数可以实现对一个字符串的追加,它的返回类型是一个char*的指针,参数是dest(需要追加的字符串的位置)和src(需要追加的字符串内容)。 2.模拟实现 下面我们来模拟实现,首先字符串追加,肯定是追加在字符串的最后面,所以我们就得取到字符串最后一位的地址,往后实现追加,字符串是以/0为结尾,我们可以循环目标字符串,如果检测到/0,就停止。 此时dest指向的是字符串的末尾,往后开始,将src的内容赋给dest并实现自增,直到src遇到/0结束。 注意事项 这里需要注意的是,目标字符串的空间一定要够; 同时它的返回类型是一个字符指针,可以用一个字符指针接收。 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<assert.h> //strcat函数模拟实现 char* my_strcat
字符串函数操作 isprintable():判断一个字符串中所有字符是否都是可打印字符的. 与isspace()函数很相似 如果字符串中的所有字符都是可打印的字符或字符串为空返回 True,否则返回 False str1 = 'gheruiv'; str2 = '\n\t'; print(str1 intab:需要转换的字符组成的字符串。 outtab:转换的目标字符组成的字符串。 注意:两个字符串的长度必须相同,为一一对应的关系。返回字符串转换后生成的新字符串。 = str.split("j"); res3 = str.split("j",3); print(res1); // ['ljbjgdfkjmmjhusjdvdjsjs'] print(res2 ); // ['l', 'b', 'gdfk', 'mm', 'hus', 'dvd', 's', 's'] print(res3); // ['l', 'b', 'gdfk', 'mmjhusjdvdjsjs
前言 strcpy()函数、strcat()函数、strcmp()函数是长度不受限制的字符串函数,存在危险。 strncpy()函数、strncat()函数、strncmp()函数多了一个参数n,限制了对字符串的访问,相对来说安全一些。 1. strncpy()函数 1.1 strncpy()函数的声明 点击转到cpluscplus.com官网 - strncpy 所需头文件为<string.h> 拷贝num个字符从源字符串到目标空间 strncmp()函数 3.1 strcmp()函数的声明 点击转到cpluscplus.com官网 - strncmp 所需头文件为<string.h> 比较两个字符串中最多num个字符 == 0 || *(first-3) !
1.复制函数--------------strcpy函数 函数使用 char*strcpy(char* destination, const char* source) strcpy函数用于拷贝字符串 ) char *strcat( char* destination, const char* Source ); strcat函数用于追加字符串,即将一个字符串中的内容追加到另一个字符串中。 arr1[20] = "hello "; char arr2[] = "world"; strcat(arr1, "world"); printf("%s\n", arr2); char arr3[ 20] = "hello "; char arr4[] = { 'a','b','c','d','e','f' }; strcat(arr3, arr4); printf("%s\n", arr3 ); return 0; } 三.strcmp(字符串比较) 1.函数使用 int strcmp(const char* str1,const char* str2) strcmp函数用于比较两个字符串内容的函数
但是对于内存来说 -3的原码是10000000000000000000000000000011 -3的反码是111111111111111111111111111111111100 -3的补码是111111111111111111111111111111111101 -3是以补码类型在内存中存储的 当以无符号类型读取时,读到的是-3的补码 放回的是一个特别大的正数。 (注: strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容 并且可修改。) • strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串 中的位置。 • strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标 记。 • 如果字符串中不存在更多的标记,则返回 NULL 指针。
1.函数介绍 1 strlen 这个函数用于返回字符串的长度,在求字符串或是遍历字符串经常用来求字符串长度。 3.注意函数的返回值为size_t,是无符号的( 易错 ) 2.strcpy 提一下,通过函数名可以大概判断该函数的用法,如cpy就是copy(复制),该函数用来进行字符串的复制 需要注意的细节: 1. 2.会将源字符串中的 '\0' 拷贝到目标空间。 3.目标空间必须足够大,以确保能存放源字符串。 4.目标空间必须可变。 3 strcat strcat用来将两个字符串追加到一个字符串中。 3.目标空间必须可修改 4 strcmp strcmp函数用来将两个字符串进行比较,比较的标准是按照字符的字典序进行比较的(如a与r比较,因为根据26个字母的排序,r在a之后,所以r>a) 标准规定: 3.memcmp 比较从ptr1和ptr2指针开始的num个字节 返回值如下 总结 上面这些基本上都是常用的字符串和内存函数,感兴趣的兄弟们可以自己了解,并尝试着模拟一下,关于字符串函数的模拟实现
注意函数的返回值为size_t,是无符号的( 易错 ) 学会strlen函数的模拟实现 strlen是一个库函数,是用来求字符串的长度的,len1和len2的值是一样的,因为str是char*类型的指针 (注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。) strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。 strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。 如果字符串中不存在更多的标记,则返回 NULL 指针。 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
strcpy将arr1复制给arr2 strcat函数 将源字符串的副本追加到目标字符串。 string.h> int main() { char arr1[] = "abcdefg"; char arr2[20] = "xxxxxxxxxxx"; strncpy(arr2, arr1, 3) string.h> int main() { char arr1[] = "helde"; char arr2[] = "hello"; int ret = strncmp(arr1, arr2,3) ⼀个或者多个分隔符分割的标 记 strtok函数找到str中的下⼀个标记,并将其用 \0 结尾,返回⼀个指向这个标记的指针(注: strtok函数会改变被操作的字符串,所以被strtok函数切分的字符串 ⼀般都是临时拷⻉的内容并且 可修改) strtok函数的第⼀个参数不为NULL 函数将找到str中第⼀个标记,strtok函数将保存它在字符串 strtok函数的第⼀个参数为NULL,函数将在同⼀个字符串中被保存的位置开始
字符转换函数 int tolower ( int c ); //将参数传进去的⼤写字⺟转⼩写 int toupper ( int c ); //将参数传进去的⼩写字⺟转⼤写 3. strlen的使⽤ (注: strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改。) • strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串 中的位置。 • strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标 记。 • 如果字符串中不存在更多的标记,则返回 NULL 指针。 12. strerror函数的使⽤ strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。
其中这里值得讲的一个是其返回值为size_t,其为无符号整数,有个易错的地方,如下 因为3,6为无符号整数,从而相减得出-3其也为无符号整数,-3转化为无符号整数就为 2的32次方加3,从而为正,输出大于 例子如下 所以我们就多了这三个函数,有长度限制的函数,vs认为其很安全。 strncpy strncpy 如果num小于字符串长度,则直接取出其对应的字符 (后面不带\0),对应什么就拿什么。 当然不要故意制造bug,使比较长度大于本身字符串长度 。 头文件 头文件都为 #include<string.h> 其三个函数模拟实现就不说了。 strtok 这个strtok函数本质太过复杂,这里就不模拟其函数和讲它的本质。就讲下他该如何用。 当我们要分割一个字符串时,就用strtok 。 上面的图也是一个例子去证明其perror作用 总结 这就是字符函数和字符串函数。接下来下一篇将会讲内存函数 ,敬请期待,谢谢各位的支持!
字符串函数 SELECT ASCII('Abcdfsf'), CHAR_LENGTH('hello'),CHAR_LENGTH('我们'), # 返回字符数 LENGTH('hello'),LENGTH FROM DUAL; 运行结果如下所示: ---- # 字符串的索引是从1开始的! SELECT INSERT('helloworld',2,3,'aaaaa'), # 从第二个字符串开始,把往后三个替换成'aaaa' REPLACE('hello','ll','mmm') # 把字符串中的 ; 运行结果如下所示: ---- SELECT LEFT('hello',2), # 取左边两个字符 RIGHT('hello',3), # 取右边三个字符 RIGHT('hello',13) FROM FIELD('mm','gg','mm','dd','mm'), # 返回第一个字符串出现的位置 FIND_IN_SET('mm','gg,mm,dd,mm,gg') # 类似,就是字符串变成逗号隔开
1.字符分类函数 C语言中有一系列函数是专门做字符串分类的,也就是一个字符是属于什么类型的字符,这些函数的使用需要包含一个头文件ctype.h 我们介绍其中的一个函数,其余函数类似: int islower 5.strcat函数的使用和模拟实现 //函数原型 char* strcat(char* destination , const char* source); 功能:字符串追加,将source指向的源头字符串中的所有字符串都追加到 3.结束条件:当返回NULL时,表示分割完成。 "; char str3[30] = { 0 }; strcpy(str3, str1); char* ret = NULL; for (ret = strtok(str3, str2); ret 3. strerror 的使⽤需要包含<string.h> 参数: errnum: 表示错误码 这个错误码一般传递的是errno这个变量的值,在C语言中有一个全局变量叫:errno ,当库函数的调用发生错误的时候
前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串 中或者 字符数组中。 字符串常量 适用于那些对它不做修改的字符串函数 1. (注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。) strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。 strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标 记。 如果字符串中不存在更多的标记,则返回 NULL 指针。 = ‘\0’) p++; return p - s; } 2.2 模拟实现strcpy 参考代码 //1.参数顺序 //2.函数的功能,停止条件 //3.assert //4.const修饰指针
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> //strstr字符串查找函数 void findStr() { 遇到换行符会停止输入 //但会带走缓冲区的换行符 fgets(str, sizeof(str), stdin); //将结尾的\n换成\0 str[strlen(str)-1]='\0'; //字符串比较 //找到返回第一次查找到字符串的地址 //失败返回-1 char *pos=strstr(str, "so"); if (pos == NULL) { printf("字符串没有找到") ; } else { printf("找到相关字符串"); } } int main() { findStr(); return 0; } 案例:屏蔽不文明用语 1.案例需求:将不文明话语 ---指针遍历 char* p = str; while (1) { //对大sb关键字进行检测 //result接收的是查找到的字符串首地址 char* result = strstr
C语言仅提供了两个字符串转换函数: int tolower (int c); //将参数传进去的大写字母转小写 int toupper (int c); //将参数传进去的小写字母转大写 (const char * str); 字符串要以\0作为结束标志 参数主席昂的字符串必须要以\0结束 注意函数的返回值是size_t 是无符号 strstr char* strstr ( const char * str1,const char * str2); 函数返回字符串str2在字符串str1中第一次出现的位置 函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数保存它在字符串中的位置. strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记 如果字符串中不存在更多的标记,则返回NULL指针 int main() { char arr
字符函数和字符串函数 字符函数分类 C语言有一些列函数用于对不同的字符进行分类,一个字符属于何种类型。以下函数都需要包含头文件 ctype.h。 str); 用于统计字符串个数,结束标志是 ’\0‘,在字符串里遇见这个字符’\0‘,就会结束函数调用,将统计的值返回。 若传递的字符串里没有以 ’\0‘结尾,那使用strlen函数就会越界访问非字符串的内容,直到碰见 ’\0‘才会停止。 模拟实现strlen函数 strlen的3种写法: 计数器: size_t my_strlen(const char* str) { assert(str); size_t count = 0; 由于传递的str字符串不能为空,也不期望在函数内对齐进行修改,这里使用了assert断言,及const修饰来限制了str字符串,使函数有更好的健壮性。
sscanf函数 sscanf的作用:从一个字符串中读进于指定格式相符的数据。利用它可以从字符串中取出整数、浮点数和字符串。 <stdio.h> #include<string.h> void test() { //sscanf函数 char s[200]="拨不通的电话, 遍布星辰的晚上, 拨不通的电话, 信号丢失云层上 "; char s1[300] = {0}; char s2[300] = {0}; char s3[300] = {0}; char s4[300] = {0}; //遇到空格结束读取 sscanf(s, "%s %s %s %s", s1,s2,s3,s4); printf("%s", s1); printf("%s", s2); printf("%s", s3); printf 将已知的字符串通过格式化匹配出有效信息 1、%*s或%*d 跳过数据,%*2d可以选择跳过几个数字,不然就会默认都跳过 2、%[width]s 读指定宽度的数据 3、%[a-z] 匹配a到z中任意字符
) 使用 字符分类函数 使用字符转换函数 二 字符串相关函数: 1 strlen的使⽤和模拟实现 1.1 作用:用于对字符串长度的计算。 例如我们使用强制类型转换将其转换为整型类型 1.4 strlen的模拟实现【四种:1计数器⽅式(能创建临时变量计数器和不能创建临时变量计数器) 2 指针-指针的⽅式 3函数递归】 计数器 2.4使用[两种] 2.5strcpy模拟实现【函数的参数一定要按照函数定义(形式)一样】 3 strcat的使⽤和模拟实现 3.1作用:用于字符串的追加(连接)(在一个字符串后面追加一个字符串)strcat 如果num个字符都相等,就是相等返回0. 6 strstr的使⽤和模拟实现 1作用: 字符串查找,注意这里查找的是一个子字符串在另一个字符串中第一次中出现的地址 2 3形式 char * 本篇文章就到此结束,希望有所能帮到 读者更好的了解字符函数和字符串函数。
函数模拟 char* my_strcpy(char* arr1, const char* arr2) { char* arr3 = arr1; while (*arr1 = *arr2) { , "sahdhd"); printf("%s", arr1); }//模拟strcpy函数 模拟strcmp函数 int my_strcmp(const char* arr1, const char 模拟strcat函数 char* my_strcat(char* arr1, const char* arr2) { char* arr3 = arr1; while (*arr1) arr1 *arr2) return (char*)arr1; const char* arr3; const char* arr4; while (*arr1) { arr3 = arr1; arr4 = arr2; while (*arr3 == *arr4) { arr3++; arr4++; if (*arr4 == 0) return (char
字符串函数 前面我们讲了strlen、strcat、strcpy、strcmp函数的使用和模拟实现。 hello,我是结衣。 今天我们讲字符串函数strcpy、strcat、strcmp函数的限制使用。就是可以自己限制字符的使用数目。 将这些函数中间填加‘n’变为strncpy、strncat、strncmp。 strncpy函数 使用该函数可以将源字符串复制到目的字符串中,并且可以限制复制的字符个数。 return 0; } strncat函数 格式和上面一样的 代码 #include <stdio.h> #include <string.h> int main() { char ch1[20] = "abc"; char ch2[] = "abcdef"; printf("%s\n", strncat(ch1, ch2, 3));//strcat函数可以限制字符数目。