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

网站建设审批凡科小程序

网站建设审批,凡科小程序,去西安旅游最佳路线,做网站,用什么做数据库最好本篇字符函数和字符串函数 求字符串长度 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://www.cadmedia.cn/news/10846.html

相关文章:

  • 可视化新闻网站开发平台百度软件
  • 建设网站公司 优帮云南京百度网站快速优化
  • 中国建设银行网站特色自己怎么创建一个网站
  • 电子政务政府门户网站建设百度百家号注册
  • elementor做视频网站苏州优化seo
  • 成都住建厅官方网站网络搜索引擎有哪些
  • wordpress怎么备份数据库天津网络优化推广公司
  • 辽宁建设考试培训网站bing搜索引擎
  • 网站建设单位有哪些seo内部优化方案
  • 内蒙古自治区工程建设网站网站优化seo培
  • 旅游网站建设分析 需求石家庄最新消息
  • 国内网站建设推荐打广告去哪个平台
  • 做代购在哪个网站好企业广告宣传
  • asa8.4 做网站映射女性广告
  • 手机便宜电商网站建设制作一个网站需要多少费用
  • 建设银行网站明细多长时间深圳优化公司义高粱seo
  • 传媒公司属于诈骗吗杭州seo建站
  • 如何选择网站定制公司滕州seo
  • 淘宝直播要先建设个网站吗app推广引流渠道
  • 做一个学校网站广告位招商怎么找客户
  • 东莞排名seo网站关键词优化百度搜索热度指数
  • 云南省建设工程质量监督管理站网站营销培训课程ppt
  • 代办厦门公司注册长沙关键词优化新行情报价
  • 知名网站开发公司百度一下官网网址
  • 上海商务网站建设制作网站的基本流程
  • 如何做网站用户活跃度成年学校培训班
  • 成都网站建设 培训学校重庆百度seo代理
  • 重庆推广网站排名价格如何查看百度指数
  • 邢台网站优化公司百度seo搜索
  • 海口网站seo小程序商城制作一个需要多少钱