当前位置: 首页 > news >正文

网站建设管理及维护做公司网站推广

网站建设管理及维护,做公司网站推广,合肥金融网站开发,八年级信息技术网站建立怎么做大家好呀#xff0c;今天给大家分享一下字符函数和字符串函数#xff0c;说起字符函数和字符串函数大家会想到哪些呢#xff1f;#xff1f;我想到的只有求字符串长度的strlen,拷贝字符串的strcpy,字符串比较相同的strcmp,今天#xff0c;我要分享给大家的是我们一些其他的… 大家好呀今天给大家分享一下字符函数和字符串函数说起字符函数和字符串函数大家会想到哪些呢我想到的只有求字符串长度的strlen,拷贝字符串的strcpy,字符串比较相同的strcmp,今天我要分享给大家的是我们一些其他的字符函数和字符串函数跟着小张一起去看看吧 文章目录 前言长度不受限制的字符串函数strcat 长度受限制的字符串函数strncpystrncatstrncmp 字符串查找strstrstrtok 错误信息报告strerror 模拟实现strcat的模拟实现strstr的模拟实现 总结 前言 C语言中对字符和字符串的处理很是频繁但是C语言本身是没有字符串类型的字符串通常放在 常量字符串中或者字符数组 中.字符串常量 适用于那些对它不做修改的字符串函数 长度不受限制的字符串函数 strcat 功能可以在一个字符串后面追加字符 函数声明char *strcat( char *strDestination, const char *strSource ); 头文件string.h 参数解释以及返回值解释第一个参数接收被追加字符串数组的地址第二个参数是追加的内容字符串数组返回的是追加后字符串数组的地址 #define _CRT_SECURE_NO_WARNINGS#include stdio.h #include string.hint main() {char arr1[20] abcdef;char arr2[] gh;strcat(arr1, arr2);printf(%s, arr1);}注意源字符串必须以 ‘\0’ 结束。 目标空间必须有足够的大能容纳下源字符串的内容。 目标空间必须可修改。 int main() {char arr1[20] abcdef;char arr2[] {a,b,c};strcat(arr1, arr2);printf(%s, arr1); }程序发生崩溃arr2数组如果没有’\0’的话他会在后面地址上找到\0,在追加到arr1数组的时候会越界放不下 字符串strcat函数不能自己给自己追加 追加前 追加后 追加的时候把源数组中的‘\0’被追加字符所覆盖 长度受限制的字符串函数 strncpy 功能拷贝num个字符从源字符串到目标空间 函数声明char * strncpy ( char * destination, const char * source, size_t num ); 头文件string.h 参数第一个参数为接收目标空间地址第二个参数接收是源空间地址返回参数是目标地址size_t是无符号整数类型num是拷贝字符的数目 #define _CRT_SECURE_NO_WARNINGS#include stdio.h #include string.hint main() {char arr1[40] hered ;char arr2[] ll;strncpy(arr1,arr2,2);printf(%s,arr1); } 如果源字符小于要拷贝的个数会怎么样 int main() {char arr1[40] hered ;char arr2[] ll;strncpy(arr1, arr2, 10);printf(%s, arr1); } 注意拷贝num个字符从源字符串到目标空间。 如果源字符串的长度小于num则拷贝完源字符串之后在目标的后边追加0直到num个。 strncat 功能追加num个字符从源字符串到目标空间。 声明char * strncat ( char * destination, const char * source, size_t num ); 头文件string.h 参数第一个参数为接收目标空间地址第二个参数接收是源空间地址返回参数是目标地址size_t是无符号整数类型num是追加字符的数目 #define _CRT_SECURE_NO_WARNINGS #include stdio.h #include string.h int main() {char arr1[40] hello ;char arr2[13] shuxiansheng;strncat(arr1, arr2, 3);printf(%s,arr1); }strncat可以追加自己 #define _CRT_SECURE_NO_WARNINGS #include stdio.h #include string.h int main() {char arr1[40] hello ;char arr2[13] shuxiansheng;strncat(arr1, arr1, 5);printf(%s,arr1); }strncmp 功能可以比较指定个数的字符串比较 声明int strncmp ( const char * str1, const char * str2, size_t num ); 头文件string.h 参数第一个参数接收第一个字符串地址第二个参数接收第二个字符串地址第三个参数为比较字符的个数比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。 #define _CRT_SECURE_NO_WARNINGS #include stdio.h #include string.h int main() {char arr1[6] hello;char arr2[] helld;int retstrncmp(arr1, arr2, 4);printf(%d, ret); }比较前四个字符由于前四个字符相同返回0比较五个字符o的ascll码值大于d的ascll码值返回1 字符串查找 strstr 功能查找子串 声明 char * strstr ( char * str1, const char * str2 ); 头文件string.h 参数第一个参数接收被查找的字符串的首地址第二个参数疑似子串的字符串的首地址 如果是子串的话返回字符串中子串的首地址不是子串的话返回空指针 代码 int main() {char arr1[] abcdefg;char arr2[] fg;char *pstrstr(arr1,arr2);//保存返回子串的首地址if (p){printf(是子串:%s, p);}else{printf(不是子串);}}编译运行 strtok 功能分隔子串 声明char * strtok ( char * str, const char * sep ); 头文件string.h 参数第一个参数接收被分解字符串的地址第二个参数中接收的是字符串中分隔符的地址返回被分隔子串的首地址 代码 #define _CRT_SECURE_NO_WARNINGS #include stdio.h #include string.h int main() {char arr1[20] helloqq.com;char arr2[] .;strtok(arr1, arr2);printf(%s, arr1); }编译运行 第一个参数指定一个字符串它包含了0个或者多个由arr2字符串中一个或者多个分隔符分割的标记。 strtok函数找到arr1中的下一个标记并将其用 \0 结尾返回一个指向这个标记的指针。 strtok函数的第一个参数不为 NULL 函数将找到arr1中第一个标记strtok函数将保存它在字符串中的位置(strtok函数在内部维护了一个静态变量保存这个位置)。 strtok函数的第一个参数为 NULL 函数将在同一个字符串中被保存的位置开始查找下一个标记。 如果字符串中不存在更多的标记则返回 NULL 指针 代码展示 #define _CRT_SECURE_NO_WARNINGS #include stdio.h #include string.h int main() {char arr1[20] helloqq.com;char arr2[] .;printf(%s\n, strtok(arr1, arr2));printf(%s\n, strtok(NULL, arr2));printf(%s\n, strtok(NULL, arr2));}编译运行 修改我们可以将字符串arr1传给strtok函数第一个分隔符。strtok函数返回字符串中第一个遇到分隔符之前的字符串首地址”hello’,然后在循环中继续调用strtok函数第一个参数传NULLstrtok自己维护的静态变量记住上次分隔的地方不用在传arr1. 代码实现 #define _CRT_SECURE_NO_WARNINGS #include stdio.h #include string.h int main() {char arr1[20] helloqq.com;char arr2[] .;char* p NULL;for (p strtok(arr1, arr2); p ! NULL; p strtok(NULL, arr2)){printf(%s\n,p);}}编译运行 错误信息报告 strerror 功能可以返回指向错误信息字符串地址 声明char *strerror( int errnum ); 头文件string.h errno.h 参数errnum是错误码就像404页面每个错误码对应着错误信息返回值是指向错误信息字符串地址 int main() {printf(%s\n, strerror(0));printf(%s\n, strerror(1));printf(%s\n, strerror(2));printf(%s\n, strerror(3));}当我们向内存申请空间时我们会使用malloc函数如果申请的内存太大是否会报错呢它会将错误码放在整型全局变量errno中使用errno时引用头文件errno.h 代码展示: #define _CRT_SECURE_NO_WARNINGS#include stdio.h #include string.h #include errno.h int main() {int *pmalloc(4000000000);//malloc申请内存失败会返回空地址if (p NULL){printf(%s\n, strerror(errno));}}注意遇到多个错误时errno会不断赋新的错误码 模拟实现 strcat的模拟实现 #define _CRT_SECURE_NO_WARNINGS #include stdio.h #include string.h #include assert.h char* mystrcat(char* p, char* q) {assert(p q);char* k p;//随着p,会丢失目标字符串首地址先保存while (*p){p;}//将p指针移动到目标字符串\0位置while ((*p*q))//将*q的值先给*p,然后两个q;p;赋值后的ascll值不为0继续循环当*q\0,赋值后ascll码值为\0,退出循环{}return k;//返回目标字符串首地址 } int main() {char arr1[20] abcde;char arr2[5] qqq;mystrcat(arr1, arr2);printf(%s, arr1);} strstr的模拟实现 char* mystrstr(char* str1, char* str2) {char* s1 str1;//两个遍历指针分别指向两个字符串的首地址char* s2 str2;char* cur s1;//两个字符串开始匹配的指针while (*cur)//每循环一次就是重新匹配的过程{s1 cur;//s1移动到下一个开始匹配的位置s2 str2;//子串要从头开始匹配while (*s1*s2(*s1 *s2))//匹配的循环{s1;s2;}//不匹配退出循环if (*s2 \0)//当匹配循环完s2的指针指向子串的末尾\0;{return cur;//保存的是匹配成功时字符串中匹配到的第一个字符首地址}cur; //此时cur指向的位置不能作为开始匹配的位置cur;开始新一轮的匹配}return NULL;//当cur遍历完字符串则说明没有该子串 } int main() {char arr1[] abcdecdfg;char arr2[] cdf;char *pmystrstr(arr1,arr2);//如果找到子串返回字符串中和子串匹配的首字符首地址不为空if (p){printf(是子串);}else{printf(不是子串);}}编译运行 总结 字符串函数字符函数在处理字符问题特别的方便使得问题简单化本章还未讲到的内存操作函数放在下一篇讲如果你觉得这篇文章对你有帮助的话别忘了给小张点赞收藏加关注哪里不对的话还望大佬们指教谢谢大家我会持续分享给大家自己学到的知识也是在好好的做总结
http://www.sadfv.cn/news/1001/

相关文章: