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

域名做违法网站长春网站建设推荐网诚传媒

域名做违法网站,长春网站建设推荐网诚传媒,银川建设厅网站,重庆线上推广软件字符以及字符串函数 求字符串长度strlen 长度不受限制的字符串函数strcpystrcatstrcmp 长度受限制的字符串函数strncpystrncatstrncmp 字符串查找strstrstrtok 错误信息报告strerror 字符分类函数字符转换函数tolowertoupper 内存操作函数memcpymemmovememcmpmemset 这篇文章注… 字符以及字符串函数 求字符串长度strlen 长度不受限制的字符串函数strcpystrcatstrcmp 长度受限制的字符串函数strncpystrncatstrncmp 字符串查找strstrstrtok 错误信息报告strerror 字符分类函数字符转换函数tolowertoupper 内存操作函数memcpymemmovememcmpmemset 这篇文章注意讲述了库函数中常见字符函数以及字符串函数的使用以及注意事项同时模拟实现部分函数.本文主要使用网站链接: cplusplus 求字符串长度 strlen strlen介绍 size_t strlen(const char* str); 获取字符串长度C 字符串的长度由终止 null 字符决定C 字符串的长度与字符串开头和终止 null 字符之间的字符数不包括终止 null 字符本身一样长。 头文件#includestring.h参数字符串返回值字符串的长度 注意事项 1.strlen 是求字符串长度的求出的长度不可以为负所以返回类型为size_t是无符号的size_t可以看作是umsigned int 类型但俩者不同之处在于俩个size_t的返回值相减得到的值任然是size_t 2.字符串已经将’\0’作为结束标志strlen函数返回的是在字符串中’\0’前面出现的字符个数不包含’\0’ 3.参数指向的字符串必须要以’\0’为结束标准 实际使用 //strlen的实际使用 #includestdio.h #includestring.h int main(void) {char arr[] hello!;int ret1 (int)strlen(arr);printf(%d\n, ret1);printf(%d\n, (int)strlen(future));return 0; }运行截图 模拟实现 方法1使用计数器模拟实现strlen #includestdio.h #includeassert.h //使用计数器模拟实现strlen size_t my_strlen(const char* str) {//断言字符串不能为空assert(str);int count 0;while (*str){count;str;}return count; } int main(void) {char arr[] Hello China!;//接收字符串长度int ret (int)my_strlen(arr);//打印printf(%d ,ret);return 0; }方法2使用递归模拟实现strlen //使用递归模拟实现strlen #includestdio.h #includeassert.h size_t my_strlen(const char* str) {//断言字符串不能为空assert(str);if (*str\0){return 0;}else{return 1 my_strlen(str1);} } int main(void) {char arr[] Hello beijing!;//接收字符串长度int ret (int)my_strlen(arr);//打印printf(%d, ret);return 0; }方法3使用指针与指针之间的运算模拟实现strlen #define _CRT_SECURE_NO_WARNINGS 1 //使用指针与指针之间的运算模拟实现strlen #includestdio.h size_t my_strlen(const char* str) {char* s str;while (*s !\0){s;}return s - str; } int main(void) {char arr[] Hello shandong;//接收返回值int ret (int)my_strlen(arr);//打印printf(%d, ret);return 0; }长度不受限制的字符串函数 strcpy strcpy介绍 char* strcpy(char* destination , const char* source) 拷贝字符串将源指向的 C 字符串复制到目标指向的数组中包括终止 null 字符并在该点停止 头文件#includestring.h参数destination指向要复制内容的目标数组的指针参数source要复制的 C 字符串返回值返回目标数组起始的指针 注意事项 1.源字符串必须以’\0’结束 2.会将源字符串中的’\0’拷贝到目标空间 3.目标空间必须足够大以确保能存放源字符串 4.目标空间可变 实际使用 //strcpy的实际使用 #includestdio.h #includestring.h int main(void) {char destination[20] { 0 };char source[] Hello shanxi!;//拷贝字符串strcpy(destination,source);//打印destinationprintf(%s\n,destination);return 0; }运行截图 模拟实现 //模拟实现strcpy #includestdio.h #includeassert.h char* my_strcpy(char* dest, const char* src) {//断言assert(dest src);//定义一个返回值char* ret dest;while (*src ! \0){*dest *src;}return ret; } int main(void) {//destination数组char dest[30] { 0 };//source数组char src[] Hello neimenggu!;//模拟实现strcpymy_strcpy(dest, src);//打印printf(%s,dest);return 0; }strcat strcat介绍 char* strcat(char* destinaion,char* source) 追加字符串将源字符串的副本追加到目标字符串。目标中终止的 null 字符被源的第一个字符覆盖并且在目标中两者串联形成的新字符串的末尾包含一个 null 字符 头文件#includestdio.h参数desitination指向目标数组的指针该数组应包含 C 字符串并且足够大以包含连接的结果字符串参数source要附加的 C 字符串。这不应与目标重叠返回值目标数组的地址 注意事项 1.源字符串必须以’\0’结束 2.目标空间必须足够大能容纳下源字符串的内容 3.目标空间必须可以被修改 4.源字符串和目标空间相同时可能会出现问题不建议使用strcat 实际使用 //实际使用strcat #includestdio.h //头文件 #includestring.hint main(void) {char dest[20] Hello ;char src[] gansu;//使用strcatstrcat(dest, src);//打印printf(%s, dest);return 0; }运行截图 模拟实现 //strcat模拟实现 #includestdio.h #includeassert.h char* my_strcat(char* dest, const char* src) {assert(dest src);//将dest的起始位置保存char ret dest;//将dest循环至\0while (*dest ! \0){dest;}//将src字符串连接在dest后面while (*src ! \0){*dest *src;dest;src;}return ret; }int main(void) {char dest[30] Hello ;char src[] heilongjiang!;//模拟实现strcatmy_strcat(dest, src);//打印printf(%s, dest);return 0; }strcmp strcmp介绍 int strcmp(const char* str1,const char* str2); 比较俩个字符串:此函数开始比较每个字符串的第一个字符。如果它们彼此相等则继续执行以下对直到字符不同或达到终止 null 字符.此函数执行字符的二进制比较。 头文件:#includestring.h参数:被比较的字符串返回值:返回一个整数值该值指示字符串之间的关系: 返回值表明0第一个字符串小于第二字符串0第一个字符串等于第二个字符串0第一个字符串大于第二个字符串 注意事项: 1.比较俩个字符串时比较俩个字符串对应位置的ASCII码值(将其转换为2进制比较) 2.在vs环境下返回0,0,0的值 实际使用: //strcmp的实际使用 #includestdio.h //头文件 #includestring.h int main(void) {//俩个不相等的字符串char str1[] Hello!;char str2[] hello!;//俩个相等的字符串char str3[] liaoning;char str4[] liaoning;//比较1和2int ret1 strcmp(str1, str2);//打印printf(%d\n,ret1);//比较3和4int ret2 strcmp(str3, str4);//打印printf(%d\n, ret2);return 0; }运行结果: 模拟实现: #define _CRT_SECURE_NO_WARNINGS 1 //strcmp的模式实现 #includestdio.h #includeassert.h int my_strcmp(const char* str1, const char* str2) {//断言assert(str1 str2);int cmp 0;//循环相同的字符while (*str1 *str2){if (*str1 \0){return 0;}str1;str2--;}//比较不同的字符if (*str1 *str2){return 1;}else{return -1;} } int main(void) {char str1[] Hello Tianjin;char str2[] Hello tianjin;//模拟实现strcmpint ret my_strcmp(str1, str2);//打印printf(%d, ret);return 0; }长度受限制的字符串函数 strncpy strncpy介绍: char * strncpy(char* destination,const char* source,size_t num); 从字符串中复制字符:将源的前 num 个字符复制到目标。如果在复制 num 个字符之前找到源 C 字符串的末尾由 null 字符表示则 destination 将用零填充直到将 num 个字符写入该字符串。 头文件:#includestring.h参数destination:指向要复制内容的目标数组的指针参数source:要复制的 C 字符串参数num:要从源复制的最大字符数(size_t 是无符号整数类型)返回值:返回目标数组起始的指针 注意事项: 1.如果 source 的长度大于 num则不会在目标末尾隐式附加 null 字符。因此在这种情况下destination 不应被视为以 null 结尾的 C 字符串(这样读取它会溢出) 2.目的地和源不得重叠 3.如果源字符串的长度小于num,则拷贝完字符串之后,在目标的后面追加0,直到num个 实际使用: #define _CRT_SECURE_NO_WARNINGS 1 //实际使用strncpy #includestdio.h //头文件 #includestring.h int main(void) {char destination[20] ***************;char source[] Hello hebei!;//从字符串中复制字符strncpy(destination, source, 12);//打印printf(%s, destination);return 0; }运行结果: 模拟实现: //模拟实现strncpy #includestdio.h #includeassert.h char* my_strncpy(char* destination, const char* source, int num) {assert(destination source);char* ret destination;int i 0;while(num--){*destination *source;destination;source;}return ret; } int main(void) {char dest[] ***************;char src[] Hello jilin!;//模拟实现strncpymy_strncpy(dest, src, 12);//打印printf(%s, dest);return 0; }strncat strncat介绍: char* strncat (char* destination,const char* source,num) 从字符串中附加字符:将源的前 num 字符追加到 destination 后加上一个终止的 null 字符。 头文件:#includestring.h参数destination:指向目标数组的指针参数source:要附加的 C 字符串参数num:要追加的最大字符数(size_t 是无符号整数类型) 注意事项: 1.如果源代码中 C 字符串的长度小于 num则仅复制终止 null 字符之前的内容 2.目标数组应包含 C 字符串并且足够大以包含连接的结果字符串包括其他 null 字符 实际使用: //实际使用strncat #includestdio.h //头文件 #includestring.h int main(void) {char dest[30] Hello ;char src[] xinjiang!;//使用strncatstrncat(dest,src,3);//打印printf(%s,dest);return 0; }运行截图: 模拟实现: //模拟实现strncap #includestdio.h #includeassert.h char* my_strncat(char* dest, const char* src, int num) {assert(dest src);char* ret dest;//循环dest至结束while (*dest){dest;}//连接字符串while (num--){*dest *src;dest;src;}return ret; } int main(void) {char dest[30] Hello ;char src[] xizang!;//模拟实现strncapmy_strncat(dest, src, 2);;//打印printf(%s,dest);return 0; }strncmp 介绍strncmp: int strncmp (const char* str1,const char* str2); 比较两个字符串的字符:将 C 字符串 str1 的字符数与 C 字符串 str2 的字符数进行比较。 头文件:#includestring.h参数str1:要比较的 C 字符串参数str2:要比较的 C 字符串参数num:要从源复制的最大字符数(size_t 是无符号整数类型)返回值:返回一个整数值该值指示字符串之间的关系: 返回值表明0第一个字符串小于第二字符串0第一个字符串等于第二个字符串0第一个字符串大于第二个字符串 注意事项: 1.此函数开始比较每个字符串的第一个字符。 2.如果它们彼此相等则继续执行以下对直到字符不同直到达到终止的 null 字符或者直到两个字符串中的 num 个字符匹配以先发生者为准 实际使用: //实际使用strncmp #includestdio.h //头文件 #includestring.h int main(void) {char str1[] Hello Qinghai!;char str2[] Hello qinghai!;//比较字符串int ret strncmp(str1,str2,10);//打印printf(%d,ret);return 0; }运行结果: 模拟实现: //模拟实现strncmp #includestdio.h #includeassert.h int my_strncmp(const char* str1, const char* str2, int num) {assert(str1 str2);while (*str1 *str2 num){if (*str1 \0||num0){return 0;}str1;str2;num--;}if (*str1 *str2){return 1;}elsereturn -1; } int main(void) {char str1[] Hello Sichuan!;char str2[] Hello sichuan!;//模拟实现比较字符串int ret my_strncmp(str1, str2, 10);//打印printf(%d,ret);return 0; }字符串查找 strstr strstr介绍 const char* strstr(const char* str1,const char* str2); char* strstr(char* str1,const char* str2); 查找子字符串返回指向 str1 中首次出现的 str2 的指针如果 str2 不是 str1 的一部分则返回空指针 头文件#includestring.h参数str1要扫描的 C 字符串参数str2包含要匹配的字符序列的 C 字符串返回值指向 str1 中指定的整个字符序列在 str1 中首次出现的指针如果序列在 str1 中不存在则为空指针 注意事项 1.匹配过程不包括终止 null 字符 实际使用 //实际使用strstr #includestdio.h //头文件 #includestring.h int main(void) {char str1[] Hello yunnan!;char str2[] yunnan;//查找子字符串char* ret strstr(str1, str2);//打印printf(%s,ret);return 0; }运行结果 模拟实现 //strstr模拟实现 #includestdio.h #includeassert.h const char* my_strstr(const char* str1, const char* str2) {assert(str1 str2);while (*str1!\0){//引用俩个指针代替str1,str2char* S1 str1;char* S2 str2;//代替指针进入比较循环while (*S1 *S2*S1!\0 *S2 ! \0){S1;S2;}if (*S2 \0){return str1;}str1;}return NULL; } int main(void) {char str1[] Hello hainan!;char str2[] hainan;//模拟实现strstrchar* ret my_strstr(str1, str2);//打印printf(%s,ret);return 0; }strtok 介绍strtok char* strtok(char* str,const char* delimiters) 将字符串拆分对此函数的一系列调用将 str 拆分为标记这些标记是由分隔符中的任何字符分隔的连续字符序列。 头文件#includestdio,h参数str要截断的 C 字符串参数delimiters包含分隔符的 C 字符串返回值如果找到分隔符则指向分隔符开头的指针否则为空指针 注意事项 1.参数delimiters是个字符串定义了作用分隔符的字符集合 2.第一个参数指定一个字符串它包含了0个或者多个由delimiters字符串中一个或者多个分隔符的标记 3.strtok函数找到str中下一个标记并将其用’\0’结尾返回一个指向这个标记的指针注strtok函数会改变被操作的字符串返回在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改 4.strtok函数的第一个参数不为NULL,函数将找到str中第一个标记strtok函数将保存它在字符串中的位置 5.strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始查找下一个标记 6.如果字符串中不存在更多的标记则返回NULL指针 实际使用 //实际使用strtok #includestdio.h //头文件 #includestring.h int main(void) {const char str1[] Hello!China*I love youlalalala;const char del[] !*;char* ret NULL;char s[50];//拷贝字符串strcpy(s, str1);//分割打印for (ret strtok(s, del); ret ! NULL; ret strtok(NULL, del)){printf(%s\n,ret);}return 0; }运行结果 错误信息报告 strerror 介绍strerror char* strerror(int errnum) 获得一个指向错误信息的地址解释 errnum 的值生成一个字符串其中包含一条消息该消息描述错误条件就像库的函数设置为 errno 一样。返回的指针指向静态分配的字符串程序不得修改该字符串。对此函数的进一步调用可能会覆盖其内容不需要特定的库实现来避免数据争用。strerror 生成的错误字符串可能特定于每个系统和库实现。 头文件#includestdio.h参数errnum错误码返回值错误信息的地址 注意事项 1.c语言的库函数在运行的时候如果发生错误就会将错误存在一个变量中这个变量是errno 2.错误码是一些数字12345 3.我们需要将错误码翻译成错误信息 实际使用 //实际使用strerror #includestdio.h #includeerrno.h #includestring.h int main(void) {//打开文件FILE* pf fopen(my.txt,r);if (pf NULL){printf(%s,strerror(errno));}return 0; }运行结果 字符分类函数 函数参数符合条件则返回真iscntrl任何控制字符isspace空白字符:空格’ ‘,换页’\f’,换行’\n’,回车’\r’,制表符’\t’或者垂直制表符’\v’isdigit十进制数字0~9iscdigit十六进制数字,包括十进制数字,小写字母a-f,大写字母A-Fislower小写字母a-fisupper大写字母A-Fisalpha字母a-z或A-Zisalnum字母或者数字0-9,a-z,A-Zispunct标点符号,任何不属于数字或者字母的图形字符(可打印)isgraph任何图形字符isprint任何可打印字符,包括图形字符和空白字符 字符转换函数 tolower int tolower(int c) 将大写字母转换为小写 toupper int toupper(int c) 将小写字母转换为大写 内存操作函数 memcpy 介绍memcpy void* memcpy(void* destination,const void* source,size_t um) 复制内存块:将 num 字节的值从源指向的位置直接复制到目标指向的内存块 头文件#includestring.h参数destination指向要拷贝内容的目标数组的指针类型转换为 void* 类型的指针参数source指向要拷贝的数据源的指针类型转换为类型为 const void* 的指针。参数num要拷贝的字节数size_t 是无符号整数类型返回值返回destination的指针 注意事项 1.strcpy只能拷贝字符串而memcpy可以拷贝内存块 2.函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置 3.这个函数在遇到’\0’的时候并不会停下来 4.如果source和的destination有任何的重叠复制的内容都是未定义的 实际使用 //实际使用memcpy #includestdio.h //头文件 #includestring.h int main(void) {int src[] {1,2,3,4,5};int dest[10];//使用memcpymemcpy(dest,src,sizeof(src));//打印int i 0;for (i 0; i (sizeof(src) / sizeof(src[0])); i){printf(%d ,dest[i]);}return 0; }运行结果 模拟实现 //模拟实现memcpy #includestdio.h #includeassert.h void* my_memcpy(void* dest, const void* src, size_t num) {assert(dest src);void* ret dest;while (num--){*(char*)dest *(char*)src;dest (char*)dest 1;src (char*)src 1;}return ret; } int main(void) {int src[] { 1,2,3,4,5,6,7,8,9 };int dest[10] { 0 };//实现memcpymy_memcpy(dest, src3, 17);//打印int i 0;for (i 0; i (17 / sizeof(int)); i){printf(%d ,dest[i]);}return 0; }memmove 介绍memmove: void* memcpy(void* destination,const void* source,size_t um) 移动内存块:将 num 字节的值从源指向的位置复制到目标指向的内存块。复制就像使用了中间缓冲区一样进行允许目标和源重叠 头文件#includestring.h参数destination指向要复制内容的目标数组的指针类型转换为 void* 类型的指针参数source指向要复制的数据源的指针类型转换为类型为 const void* 的指针。参数num要复制的字节数size_t 是无符号整数类型返回值返回destination的指针 注意事项 1.与memcpy的差别就是memmove函数处理的源内存和目标内存块是可以重叠的 2.如果源空间和目标空间出现重叠就可以使用memmove 实际使用 //实际使用memmove #includestdio.h #includestring.h int main(void) {int str[] { 1,2,3,4,5,6,7,8 };//使用memmove//模拟实现memmovememmove(str 2, str, 20);//打印int i 0;for (i 0; i (sizeof(str) / sizeof(str[0])); i){printf(%d , str[i]);}return 0; }运行结果 模拟实现 //模拟实现memmove #includestdio.h #includeassert.h void* my_memmove(void* dest, const void* src, size_t num) {void* ret dest;assert(dest src);if (dest src){while (num--){//从前往后排序(char*)dest (char*)src;dest (char*)dest 1;src (char*)src 1;}}else{while (num--){//从后往前排序*((char*)dest num) *((char*)src num);}}return ret; } int main(void) {int str[] { 1,2,3,4,5,6,7,8,9,10 };//模拟实现memmovemy_memmove(str 2, str, 20);//打印int i 0;for (i 0; i (sizeof(str) / sizeof(str[0])); i){printf(%d ,str[i]);}return 0; } memcmp 比较俩个内存块将 ptr1 指向的内存块的第一个 num 字节与 ptr2 指向的第一个 num 字节进行比较如果它们都匹配则返回零或者如果它们不匹配则返回与零不同的值表示哪个值更大 int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 头文件#includestring.h参数ptr1指向内存块的指针参数ptr2指向内存块的指针参数num要比较的字节数返回值返回一个整数值该值指示字符串之间的关系 返回值表明0在两个内存块中不匹配的第一个字节在 PTR1 中的值低于 PTR2 中的值如果计算为无符号字符值0两个内存块的内容相等0在两个内存块中不匹配的第一个字节在 PTR1 中的值高于 PTR2 中的值如果计算为无符号字符值 实际使用 //实际使用memcmp #includestdio.h #includestring.h int main(void) {int str1[] { 1,2,3,4,5 };int str2[] { 1,2,5,4,5 };//实际使用memcmpint ret memcmp(str1, str2,4);//打印printf(%d\n,ret);ret memcmp(str1, str2, 12);//打印printf(%d\n, ret);return 0; }运行结果 memset 介绍memset: void * memset ( void * ptr, int value, size_t num ); 填充内存块:将 ptr 指向的内存块的第一个 num 字节设置为指定值解释为无符号字符 头文件#includestdio.h 参数ptr指向要填充的内存块的指针 参数value:要设置的值该值作为 int 传递但该函数使用此值的无符号字符转换填充内存块 参数num:要填充的字节数size_t 是无符号整数类型 返回值返回 ptr的指针 实际使用 //实际使用memset #includestdio.h #includestring.h int main(void) {char str[] ************;//实际使用memsetmemset(str, a, 5);//打印printf(%s,str);return 0; }运行结果
http://www.dnsts.com.cn/news/42904.html

相关文章:

  • 肉部网站建设包括哪些建设网站应该注意的地方
  • 一个空间能否做两个网站wordpress 图片站模板
  • 重庆网站建设招聘信息免费云服务器试用7天
  • 东莞手工活外发加工网seo网站推广软件
  • 做网站提成网站开发成本会计科目
  • 手机网站建设 移商动力网页工具栏怎么还原
  • 做外贸网站需要注意什么做羞羞的事视频网站
  • 微网站和h5有什么区别呼和浩特企业网站排名优化
  • 网站没收录的几大原因个人养老保险怎么缴纳
  • WordPress首页站内搜索cms系统设计
  • 佛山专业网站制作设计免费网站正能量app应用大全
  • 建筑行业网站模板wordpress 防采集
  • 站长百度二级网站内容建设要求
  • 公司网站制作需要多少钱义乌线上商城推广软文
  • wordpress站点搭建青岛哪家做网站的公司好
  • 网站效果长沙seo招聘
  • 建设一个游戏网站需要多少钱磁力链搜索引擎入口
  • 网站宝搭建网站环境网站怎么做可以合法让别人充钱
  • 淄博网站排名外包淮南seo
  • 天河做网站怎样做一个购物型的网站
  • 深圳手机端网站建设收费东营市建设局网站
  • 网站备案 失败网站展示英文都用什么字体
  • 做学校网站需要备案么游戏点卡平台网站开发
  • 正规的金融行业网站开发宜春网站推广优化
  • 新网网站负责人核验现场拍摄照片电子件房产管理系统
  • 网站建设哪家好服务网页设计培训包就业
  • nginx wordpress多个站点百度地图放到网站上
  • 海宁市建设局官方网站6公司黄页是什么东西
  • 大连企业网站建站模板游戏客户端开发
  • 厦门思总建设有限公司网站长春网站建设专业公司