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

宣传页制作郑州网站优化排名

宣传页制作,郑州网站优化排名,铜排制作 东莞,2018做网站还是app文章目录 一、求字符串长度strlen例子模拟实现 二、长度不受限制的字符串函数strcpy例子模拟实现 strcat例子模拟实现 strcmp例子模拟实现 三、长度受限制的字符串函数strncpy例子 strncat例子 strncmp例子 四、字符串查找strstr例子模拟实现 strtok例子 五、错误信息报告strer…

文章目录

  • 一、求字符串长度
    • strlen
      • 例子
      • 模拟实现
  • 二、长度不受限制的字符串函数
    • strcpy
      • 例子
      • 模拟实现
    • strcat
      • 例子
      • 模拟实现
    • strcmp
      • 例子
      • 模拟实现
  • 三、长度受限制的字符串函数
    • strncpy
      • 例子
    • strncat
      • 例子
    • strncmp
      • 例子
  • 四、字符串查找
    • strstr
      • 例子
      • 模拟实现
    • strtok
      • 例子
  • 五、错误信息报告
    • strerror
      • 例子
  • 六、字符分类函数
  • 七、内存操作函数
    • memcpy
      • 例子
      • 模拟实现
    • memmove
      • 例子
      • 模拟实现
    • memcmp
      • 例子

一、求字符串长度

strlen

在这里插入图片描述

  • 功能:获取字符串长度
  • 参数:c字符串(str)
  • 返回值:字符串长度(无符号整形size_t)
  • 字符串将 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。

例子

#include <stdio.h>
#include <string.h>
int main()
{const char* str1 = "abcdef";const char* str2 = "bbb";printf("%d\n", strlen(str1));printf("%d\n", strlen(str2));if (strlen(str2) - strlen(str1) > 0){printf("str2>str1\n");}else{printf("srt1>str2\n");}return 0;
}

在这里插入图片描述

模拟实现

  1. 计数器方式
int my_strlen(char* str)
{int len = 0;while (*str){str++;len++;}return len;
}
  1. 不创建临时变量
int my_strlen(const char* str)
{if (*str == '\0')return 0;elsereturn 1 + my_strlen(str + 1);
}
  1. 指针-指针
int my_strlen(char* s)
{char* p = s;while (*p!='\0'){p++;}return p - s;
}

二、长度不受限制的字符串函数

strcpy

在这里插入图片描述

  • 功能:复制字符串
  • 参数:目的字符串(destination)源字符串(source)
  • 返回值:目的字符串
  • 源字符串必须以 ‘\0’ 结束
  • 会将源字符串中的 ‘\0’ 拷贝到目标空间
  • 目标空间必须足够大,以确保能存放源字符串
  • 目标空间必须可变

例子

#include <stdio.h>
#include <string.h>int main()
{char str1[] = "Sample string";char str2[40];char str3[40];strcpy(str2, str1);strcpy(str3, "copy successful");printf("str1: %s\nstr2: %s\nstr3: %s\n", str1, str2, str3);return 0;
}

在这里插入图片描述

模拟实现

char* my_strcpy(char* dest, const char* src)
{char* ret = dest;//assert需要加入头文件assert.hassert(src != NULL);assert(dest != NULL);while (*dest++=*src++){}return ret;
}

strcat

在这里插入图片描述

  • 功能:连接字符串
  • 参数:目的字符串(destination)源字符串(source)
  • 返回值:目的字符串
  • 将源字符串的副本追加到目标字符串。目标中的终止空字符被源的第一个字符覆盖,并且在目标中由两者串联形成的新字符串的末尾包含一个空字符。
  • 目的地和来源不得重叠。

例子

#include <stdio.h>
#include <string.h>int main ()
{char str[80];strcpy (str,"these ");strcat (str,"strings ");strcat (str,"are ");strcat (str,"concatenated.");puts (str);return 0;
}

在这里插入图片描述

模拟实现

char* my_strcat(char* dest, const char* src)
{char* ret = dest;//assert需要加入头文件assert.hassert(dest);assert(src);while (*dest){dest++;}while (*dest++ = *src++){}return ret;
}

strcmp

在这里插入图片描述

  • 功能:比较两个字符串
  • 参数:要比较的字符串1(str1)要比较的字符串2(str2)
  • 返回值:
返回值表明
<0第一个不匹配的字符在 PTR1 中的值低于 PTR2 中的值
0两个字符串的内容相等
>0第一个不匹配的字符在 PTR1 中的值大于在 PTR2 中的值
  • 此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续下一对,直到字符不同或达到终止空字符

例子

#include <stdio.h>
#include <string.h>int main()
{int ret = strcmp("bbq", "bcq");if (ret > 0)printf(">\n");printf("%d\n", ret);return 0;
}

在这里插入图片描述

模拟实现

int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}return (*str1 - *str2);
}

三、长度受限制的字符串函数

strncpy

在这里插入图片描述

  • 功能:从字符串中复制字符
  • 参数:目的字符串(destination)源字符串(source)要从源中复制的最大字符数(num)
  • 返回值:目的字符串
  • 拷贝num个字符从源字符串到目标空间
  • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个
  • 如果源长度超过 num,则不会在目标末尾隐式附加空字符。因此,在这种情况下,不应将目标视为以空结尾的 C 字符串(这样读取它会溢出)
  • 目的地和来源不得重叠

例子

#include <stdio.h>
#include <string.h>int main()
{char str1[] = "To be or not to be";char str2[40];char str3[40];strncpy(str2, str1, sizeof(str2));strncpy(str3, str2, 5);str3[5] = '\0';   puts(str1);puts(str2);puts(str3);return 0;
}

在这里插入图片描述

strncat

在这里插入图片描述

  • 功能:从字符串追加字符
  • 参数:目的字符串(destination)源字符串(source)要追加的最大字符数(num)
  • 返回值:目的字符串
  • 将源的第一个数字字符追加到目标,外加一个终止空字符
  • 如果源中 C 字符串的长度小于 num,则仅复制终止空字符之前的内容
  • 目标空间必须足够大以包含串联的结果字符串,包括其他 null 字符

例子

#include <stdio.h>
#include <string.h>int main()
{char str1[20];char str2[20];strcpy(str1, "To be ");strcpy(str2, "or not to be");strncat(str1, str2, 6);puts(str1);return 0;
}

在这里插入图片描述

strncmp

在这里插入图片描述

  • 功能:比较两个字符串的字符
  • 参数:要比较的字符串1(str1)要比较的字符串2(str2)要比较i的最大字符数(num)
  • 返回值:
返回值表明
<0不匹配的第一个字符在 str1 中的值低于 str2 中的值
0两个字符串的内容相等
>0第一个不匹配的字符在 str1 中的值大于在 str2 中的值
  • 将 C 字符串 str1 的字符数与 C 字符串 str2 的字符数进行比较
  • 此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用以下对,直到字符不同,直到达到终止的空字符,或者直到两个字符串中的 num 字符匹配,以先发生者为准

例子

#include <stdio.h>
#include <string.h>int main()
{char str[][5] = { "R2D2" , "C3PO" , "R2A6" };int n;puts("Looking for R2 astromech droids...");for (n = 0; n < 3; n++)if (strncmp(str[n], "R2xx", 2) == 0){printf("found %s\n", str[n]);}return 0;
}

在这里插入图片描述

四、字符串查找

strstr

在这里插入图片描述

  • 功能:查找子字符串
  • 参数:要扫描的字符串(str1)包含要匹配的字符序列的字符串(str2)
  • 返回值:指向 str1 中指定的整个字符序列在 str2 中首次出现的指针,如果序列在 str1 中不存在,则为 null 指针

例子

#include <stdio.h>
#include <string.h>int main()
{char str[] = "This is a simple string";char* pch;pch = strstr(str, "simple");if (pch != NULL)strncpy(pch, "sample", 6);puts(str);return 0;
}

在这里插入图片描述

模拟实现

char* my_strstr(const char* str1, const char* str2)
{char* cp=str1;char* s1=str1;char* s2=str2;if (*str2 == '\0')return str1;while (*cp){s1 = cp;s2 = str2;while (*s1 && *s2 && *s1 == *s2){s1++;s2++;}if (*s2 == '\0')return cp;cp++;}return NULL;
}

strtok

在这里插入图片描述

  • 功能:将字符串拆分为标记
  • 参数:要截断的c字符串(str)包含分割字符的c字符串(delimiters)
  • 返回值:如果找到令牌,则指向令牌开头的指针,否则为空指针。当在正在扫描的字符串中到达字符串的末尾(即空字符)时,始终返回空指针
  • strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改)
  • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置
  • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记

例子

#include <stdio.h>
#include <string.h>int main ()
{char str[] ="- This, a sample string.";char * pch;printf ("Splitting string \"%s\" into tokens:\n",str);pch = strtok (str," ,.-");while (pch != NULL){printf ("%s\n",pch);pch = strtok (NULL, " ,.-");}return 0;
}

在这里插入图片描述

五、错误信息报告

strerror

在这里插入图片描述

  • 功能:获取指向错误消息字符串的指针
  • 参数:错误号(errnum)
  • 返回值:指向描述错误错误的字符串的指针
  • 解释 errnum 的值,生成一个字符串,其中包含描述错误条件的消息,就像由库的函数设置为 errno 一样

例子

#include <stdio.h>
#include <string.h>
int main()
{int i = 0;for (i = 0; i < 10; i++){printf("%d: %s\n", i, strerror(i));}return 0;
}

在这里插入图片描述

六、字符分类函数

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

七、内存操作函数

memcpy

在这里插入图片描述

  • 功能:复制内存块
  • 参数:指向目标数组的指针(destinatiom)指向要复制的数据源的指针(source)要复制的字节数(num)
  • 返回值:返回目标
  • 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置
  • 这个函数在遇到 ‘\0’ 的时候并不会停下来
  • 如果source和destination有任何的重叠,复制的结果都是未定义的

例子

#include <stdio.h>
#include <string.h>int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[20] = { 0 };//将arr1中的内容,拷贝到arr2中memcpy(arr2, arr1, 40);    int i = 0;for (i = 0; i < 20; i++){printf("%d ", arr2[i]);}return 0;
}

在这里插入图片描述

模拟实现

void* my_memcpy(void* dest, const void* src, size_t num)
{void* ret = dest;assert(dest && src);while (num--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;
}

memmove

在这里插入图片描述

  • 功能:移动内存块
  • 参数:指向目标数组的指针(destinatiom)指向要复制的数据源的指针(source)要复制的字节数(num)
  • 返回值:返回目标
  • 将字节数的值从源指向的位置复制到目标指向的内存块。复制就像使用了中间缓冲区一样,允许目标和源重叠
  • 该函数不检查源中的任何终止空字符 - 它总是准确地复制字节数

例子

#include <stdio.h>
#include <string.h>
int main()
{char str[] = "memmove can be very useful......";memmove(str + 20, str + 15, 11);puts(str);return 0;
}

在这里插入图片描述

模拟实现

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;
}

memcmp

在这里插入图片描述

  • 功能:比较两个内存块
  • 参数:指向内存块的指针1(str1)指向内存块的指针2(str2)要比较的字节数(num)
  • 返回值:
返回值表明
<0两个内存块中不匹配的第一个字节在 PTR1 中的值低于 PTR2 中的值
0两个内存块的内容相等
>0两个内存块中不匹配的第一个字节在 PTR1 中的值大于在 PTR2 中的值
  • 与 strcmp 不同,该函数在找到空字符后不会停止比较

例子

#include <stdio.h>
#include <string.h>
int main()
{int arr1[] = { 1,2,1,4,5,6 };int arr2[] = { 1,2,33 };int ret = memcmp(arr1, arr2, 10);printf("%d\n", ret);return 0;
}

在这里插入图片描述

在这里插入图片描述

http://www.hrbkazy.com/news/32500.html

相关文章:

  • 微网站用手机可以做吗腾讯nba新闻
  • 建立网站需要分几部进行网络推广引流有哪些渠道
  • 重庆市城乡建设委员会官方网站软件推广的渠道是哪里找的
  • 海南网站建设介绍sem专业培训公司
  • 彩票网站我想自己做一级消防工程师考试
  • vr网站制作域名注册新网
  • 做网站写代码流程今天nba新闻最新消息
  • 公司企业网站建设教程张家界百度seo
  • 个人网站名字可以用哪些企业网站推广方案
  • 58网站怎么做才有客户问友情链接外链
  • 做网站的时候怎么照片路径百度有哪些app产品
  • 文化墙 北京广告公司谷歌seo是什么职业
  • 上海平面网站舆情通
  • 网站制作联系百度热搜的含义
  • 网站建设 工作室购物网站推广方案
  • 响应式网站开发哪个好企业培训课程价格
  • 网站点击排名海外市场推广方案
  • 北京网络公司注册企业seo关键词优化
  • 做软件的网站手机百度2022年新版本下载
  • 有哪些平台网站是做废钢的微信营销怎么做
  • 河南政务网站建设排名微信推广引流方法
  • 棋牌游戏wordpressseo推广经验
  • 网站开发要花多少钱有什么推广的平台
  • 坪地网站建设效果长沙百度首页排名
  • 个人主机做网站东莞有限公司seo
  • 怎么样做美术招生信息网站搜什么关键词你都懂的
  • 南昌市城乡建设委员会官方网站税收大数据
  • 上海什么做网站的公司比较好长沙百度快速优化
  • 一个做问卷调查的网站指数基金什么意思
  • 建立一个个人网站郑州网站运营实力乐云seo