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

网站建设公司网茶叶公司网站的建设

网站建设公司网,茶叶公司网站的建设,我和椅子做游戏小精灵网站,九龙坡集团网站建设本篇字符函数和字符串函数 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找 strstr strtok 错误信息报告 strerror 内存操作函数 memcpy memmove memset memcmp 在我们笔试时,很…

本篇字符函数和字符串函数

求字符串长度 strlen

长度不受限制的字符串函数 strcpy strcat strcmp

长度受限制的字符串函数介绍 strncpy strncat strncmp

字符串查找 strstr strtok

错误信息报告 strerror

内存操作函数 memcpy memmove memset memcmp

在我们笔试时,很有可能会让我们自己写这样的库函数,所以我们必须明白这些函数的用法以及如何自己写出这样的函数。

文章目录

  • 本篇字符函数和字符串函数
  • 1.strlen函数及模拟实现
    • 1.1用法
    • 1.2模拟实现
  • 2.strcpy函数及模拟实现
    • 2.1用法
    • 2.2模拟实现
  • 3.strcat函数及模拟实现
    • 3.1用法
    • 3.2模拟实现
  • 4.strstr函数及模拟实现
    • 4.1用法
    • 4.2模拟实现
  • 5.strcmp函数及模拟实现
    • 5.1用法
    • 5.2模拟实现
  • 6.memcpy函数及模拟实现
    • 6.1用法
    • 6.2模拟实现
  • 7.memmove函数及模拟实现
    • 7.1用法
    • 7.2模拟实现
  • 8. 其他字符函数和字符串函数
    • 8.1strncpy
    • 8.2strncat
    • 8.3strncmp
    • 8.4字符分类函数
    • 8.5strock


1.strlen函数及模拟实现

1.1用法

字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包 含 ‘\0’ )。

用法举例:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{const char* str1 = "abcdef";int ret = strlen(str1);printf("%d", ret);return 0;
}

在这里插入图片描述
我们可以看到输出就是6,用来计算字符串中 ‘\0’ 前面出现的字符个数。

1.2模拟实现

//方法1,计数器方式
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}//方法2,递归函数
int my_strlen(const char * str)
{
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}//方法3,指针-指针的方式
int my_strlen(char *s)
{
char *p = s;
while(*p != ‘\0)
p++;
return p-s;
}

2.strcpy函数及模拟实现

2.1用法

源字符串必须以 ‘\0’ 结束。其会将源字符串中的 ‘\0’ 拷贝到目标空间。

用法举例:

int main()
{char arr1[20] = {0};char arr2[] = "abc";strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

2.2模拟实现

char* my_strcpy(char* arr1,char* arr2)
{char* ret = arr1;assert(arr1 != NULL);assert(arr2 != NULL);while (*arr2!='\0'){*arr1 = *arr2;arr1++;arr2++;}return ret;
}

3.strcat函数及模拟实现

3.1用法

追加字符串,把一个字符串放到另一个字符串后面

用法举例:

int main()
{char arr1[30] = "shuaige,and,";char arr2[] = "meinv";printf("%s",strcat(arr1, arr2));return 0;
}

在这里插入图片描述

3.2模拟实现

char* my_strcat(char* arr1, char* arr2)
{char* ret = arr1;assert((arr1 && arr2) != NULL);while (*arr1 != '\0'){arr1++;}while (*arr2 != '\0'){*arr1 = *arr2;arr1++;arr2++;}return ret;
}

4.strstr函数及模拟实现

4.1用法

返回arr1中arr2第一次出现的位置,如果arr1中没有arr2,就返回NULL

用法举例:

int main()
{char arr1[] = "abbbcdef";char arr2[] = "bbc";char* ret = strstr(arr1, arr2);if (ret == NULL){printf("找不到哦");}else{printf("%s", ret);}return 0;
}

在这里插入图片描述

4.2模拟实现

my_strstr(char* arr1, char* arr2)
{char* record;//记录开始匹配的位置char* s1;//变利arr1指向的字符串char* s2;//变利arr2指向的字符串assert((arr1 && arr2) != NULL);if (*arr2 == '\0')return arr1;record = arr1;while (*record != '\0'){s1 = record;s2 = arr2;while ((*s1 && *s2 && (*s1 == *s2)) != '\0'){s1++;s2++;}if (*s2 == '\0')return record;record++;}return NULL;
}

5.strcmp函数及模拟实现

5.1用法

比较两个字符串的大小(按位比较,也就是一位一位比较)
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

用法举例:

int main()
{char arr1[] = "abc";char arr2[] = "abd";int ret = strcpy(arr1, arr2);if (ret>0)printf("arr1大");else if (ret=0)printf("一样大");else printf("arr2大");return 0;
}

在这里插入图片描述

5.2模拟实现

my_strcpy(char* arr1, char* arr2)
{assert((arr1 && arr2) != NULL);while (*arr1 == *arr2){if (*arr1 == '\0')return 0;arr1++;arr2++;}if (*arr1 > *arr2)return 1;elsereturn -1;
}

6.memcpy函数及模拟实现

6.1用法

拷贝数据,数据不重叠,即将一个数组拷贝到另一个不相干的数组。不能实现将一个数组拷贝到这个数组本身。

用法举例:

int main()
{int arr1[10] = { 0 };int arr2[] = { 1,2,3,4,5 };memcpy(arr1, arr2, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr1[i]);}return 0;
}

在这里插入图片描述

6.2模拟实现

void* my_memcpy(void* arr1, void* arr2, int sz)
{void* ret = arr1;assert((arr1 && arr2) != NULL);while (sz != 0){*(char*) arr1 = *(char*) arr2;arr1 = (char*)arr1 + 1;arr2 = (char*)arr2 + 1;sz--;}return ret;
}

7.memmove函数及模拟实现

7.1用法

拷贝数据,数据重叠时也能做到。即相较于memcpy,可以实现将一个数组拷贝到这个数组本身。

用法举例:

int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };memmove(arr + 2, arr, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

在这里插入图片描述

7.2模拟实现

void* my_memmove(void* arr1, const void* arr2, size_t sz)
{assert((arr1 && arr2) != NULL);void* ret = arr1;if (arr1 < arr2){while (sz != 0){*(char*)arr1 = *(char*)arr2;arr1 = (char*)arr1 + 1;arr2 = (char*)arr2 + 1;sz--;}}else{while (sz!=0){sz--;*((char*)arr1 + sz) = *((char*)arr2 + sz);}}return ret;
}

8. 其他字符函数和字符串函数

提示:其他函数没有那么重要,这里只简单说明用法,不再进行模拟实现!

8.1strncpy

相较于strcpy,其可以自定义拷贝多少个字符。

int main()
{char arr1[20] = { 0 };char arr2[] = "abcdefghi";strncpy(arr1, arr2, 3);printf("%s\n", arr1);return 0;
}

在这里插入图片描述

8.2strncat

相较于strcat,可以自定义在后面拷贝多少个字符。

int main()
{char arr1[20] = "abc\0xxxxxxxxxxxxxx";char arr2[] = "defghi";strncat(arr1, arr2, 5);printf("%s\n", arr1);return 0;
}

在这里插入图片描述

8.3strncmp

相较于strcmp,可以指定比较多少个字符。

int main()
{char arr1[] = "abczef";char arr2[] = "abcqw";int ret = strncmp(arr1, arr2, 4);printf("%d\n", ret);return 0;
}

在这里插入图片描述

8.4字符分类函数

函数如果他的参数符合下列条件就返回真
iscntrl任何控制字符
isdigit十进制数字 0~9
isspace空白字符:空格‘ ’,换页‘\f’,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v’
islower小写字母a~z
isxdigit十六进制数字,包括所有十进制数字,小写字母af,大写字母AF
isupper大写字母A~Z
isalpha字母a-z或A~Z
isalnum字母或者数字,a-z,A-Z,0~9
ispunct标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph任何图形字符
isprint任何可打印字符,包括图形字符和空白字符

8.5strock

char * strtok ( char * str, const char * sep );

①sep参数是个字符串,定义了用作分隔符的字符集合
②第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
③strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:
④strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。)
⑤strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。
⑥strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标 记。 如果字符串中不存在更多的标记,则返回 NULL 指针。

int main()
{char arr[] = "dashuaige@yeah.net@hehe.haha";char arr2[] = "192.168.23.101";char buf1[200] = { 0 };//"zpengwei\0yeah.net"strcpy(buf1, arr);char buf2[200] = { 0 };//"192.168.23.101"strcpy(buf2, arr2);char* p = "@.";char* s = NULL;for (s = strtok(buf1, p); s != NULL; s=strtok(NULL, p)){printf("%s\n", s);}char* p2 = ".";for (s = strtok(buf2, p2); s != NULL; s = strtok(NULL, p2)){printf("%s\n", s);}return 0;
}

在这里插入图片描述


文章转载自:

http://8QfyX19y.Lqqqh.cn
http://M9VEFgzl.Lqqqh.cn
http://4tbdPwNT.Lqqqh.cn
http://uv8akc12.Lqqqh.cn
http://Rt0rltaR.Lqqqh.cn
http://6DB9ShIm.Lqqqh.cn
http://co9ZL0TA.Lqqqh.cn
http://rWKYhAWt.Lqqqh.cn
http://YhvgQjWF.Lqqqh.cn
http://Sh5Xw0dc.Lqqqh.cn
http://JyiV0K5H.Lqqqh.cn
http://fLUd2JCh.Lqqqh.cn
http://AJcGnWkH.Lqqqh.cn
http://ZabCXgnA.Lqqqh.cn
http://MmfLTtuI.Lqqqh.cn
http://LrlT8zod.Lqqqh.cn
http://axejb6Np.Lqqqh.cn
http://pLWPSDmW.Lqqqh.cn
http://CKo70vpP.Lqqqh.cn
http://M483q5ZW.Lqqqh.cn
http://P4Ie4Rj3.Lqqqh.cn
http://MsoeJK0G.Lqqqh.cn
http://oFadVUC5.Lqqqh.cn
http://JIMhrwZE.Lqqqh.cn
http://IorUgfH2.Lqqqh.cn
http://VhiADbZ2.Lqqqh.cn
http://VGafVlsn.Lqqqh.cn
http://FAR7SsNr.Lqqqh.cn
http://SrsrzaXt.Lqqqh.cn
http://ElOlIcKn.Lqqqh.cn
http://www.dtcms.com/wzjs/732410.html

相关文章:

  • 做半成品网站七台河新闻联播回放
  • ps做 网站标准尺寸是多少怎么用自己主机做网站、
  • 建设一个网站首先需要什么做茶评的网站
  • 宝安网站建设公司分类信息网站开发教程
  • 天津网站建设技术外包wordpress 入口文件
  • 怎么做外语网站同城购物网站建设
  • 招远专业做网站公司太原网站建设外包须知传媒
  • 代理公司帮忙注册公司需要多少钱厦门seo新站策划
  • 专业海外网站推广创建网站论坛
  • 深圳集团网站开发公司表情制作器
  • 互动网门户网站建设手机wordpress的文章分类
  • dw手机网站怎么做网站接入服务提供商
  • 大连百事通国际旅行社河北seo基础知识
  • 什么网站 是cms系统下载网站流量图怎么做
  • 个人免费建站系统国外服务器购买平台
  • 关于单位网站建设的seo的工作流程
  • 广州seo推广运营专员南宁7天优化网络科技公司
  • 设计学校网站模板免费下载谷歌云wordpress
  • 公司网站的宣传栏怎么做2016年建设网站赚钱吗
  • 网站配置域名解析网站运营建设的目标
  • 网站维护与更新网站系统制作教程视频教程
  • 论坛网站推广方案网站建设sem
  • 网站科技感页面设计网站建设证据保全
  • 做网站定制开发的公司wordpress 4.4.3下载
  • 网站建设方案可以乱写吗营销型网站的建设流程图
  • 九龙坡集团网站建设张店网站制作价格低
  • 网站开发难点国外对网站开发的研究
  • 安蓉建设总公司网站可以做笔记的网站
  • 文化馆网站建设意义wordpress博客分享到朋友圈
  • 手怎么搭建网站民治营销网站制作