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

网站建设nayuwangwordpress图片文件目录下

网站建设nayuwang,wordpress图片文件目录下,网站开发思路怎么写,wordpress下载视频C语言之字符串函数 文章目录 C语言之字符串函数1. strlen的使用和模拟实现1.1 strlen的使用1.2 strlen的模拟实现 2. strcpy的使用和模拟实现2.1 strcpy的使用2.2 strncpy的使用2.3 strcpy的模拟实现 3. strcat的使用和模拟实现3.1 strcat的使用3.2 strncat3.3 strcat的模拟实现…

C语言之字符串函数

文章目录

  • C语言之字符串函数
    • 1. strlen的使用和模拟实现
      • 1.1 strlen的使用
      • 1.2 strlen的模拟实现
    • 2. strcpy的使用和模拟实现
      • 2.1 strcpy的使用
      • 2.2 strncpy的使用
      • 2.3 strcpy的模拟实现
    • 3. strcat的使用和模拟实现
      • 3.1 strcat的使用
      • 3.2 strncat
      • 3.3 strcat的模拟实现
    • 4. strcmp 的使⽤和模拟实现
      • 4.1 strcmp的使用
      • 4.2 strncmp
      • 4.3 strcmp的模拟实现

1. strlen的使用和模拟实现

• 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前⾯出现的字符个数(不包含 ‘\0’ )。
• 参数指向的字符串必须要以 ‘\0’ 结束。
• 注意函数的返回值为size_t,是⽆符号的

1.1 strlen的使用

strlen函数的声明

size_t strlen ( const char * str );

strlen函数是用来计算字符串的长度的,计算的是 ’ \0 '之前字符的总个数

例子:

#include <stdio.h>
#include <string.h>  //使用strlen需要包含的头文件
int main()
{char arr[] = "abcdef";strlen(arr);printf("%s\n", arr);return 0;
}

运行结果为 6

sizeof不同的是,sizeof计算的数组中的元素个数包括’ \0 ',详细可看sizeof和strlen

1.2 strlen的模拟实现

strlen传一个地址,然后它就会计算’\0’之前字符的总个数,并且返回值是size_t即无符号整型
代码如下:

#include <stdio.h>
#include <string.h>
#include <assert.h>
size_t my_strlen1(const char* str)//通过计数器的方式
{assert(str != NULL);    //assert断言,判断传入的地址是否为空指针int count = 0;               while (*str != '\0')//str中的内容不为'\0'的时候进入循环{count++;str++;}return count;}
size_t my_strlen2(const char* str)//指针 - 指针 计算的是两个指针之间的元素个数
{char* start = str;assert(str != NULL);while (*str != '\0'){str++;}return str - start;}
size_t my_strlen3(const char* str) //递归的方式
//假设传入一个字符串"abc"
//递的过程
//第一次进入函数,*str == a   调用本身1 + my_strlen3("bc")
//第二次进入函数,*str == b   调用本身1 + 1 + my_strlen3("c")
//第三次进入函数,*str == c   调用本身1 + 1 + 1 + my_strlen3(" ")
//第四次进入函数,*str == '\0' ,开始归
//第四次返回一个0,0 + 1 + 1 + 1
{if (*str == '\0')return 0;elsereturn 1 + my_strlen3(str+1);
}int main()
{char arr[] = "abcdef";size_t len1 =  my_strlen1(arr);size_t len2 =  my_strlen2(arr);size_t len3 =  my_strlen3(arr);printf("%zd\n",len1 );printf("%zd\n",len2 );printf("%zd\n",len3 );return 0;
}

以上为三种strlen的模拟实现,代码运行如下:
在这里插入图片描述

2. strcpy的使用和模拟实现

• 源字符串必须以 ‘\0’ 结束。
• 会将源字符串中的 ‘\0’ 拷⻉到⽬标空间。
• ⽬标空间必须⾜够⼤,以确保能存放源字符串。
• ⽬标空间必须可修改。

2.1 strcpy的使用

函数声明如下:

char * strcpy ( char * destination, const char * source );

strcpy用来将source中的字符串,拷贝到destination中去

例子:

#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = { "xxxxxxxx"};char arr2[] = "abc";strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

代码运行结果如下:
在这里插入图片描述
在这里插入图片描述
可以看到strcpy将arr2中的元素拷贝了一份到arr1中,同时在后面加上了一个’\0’,所以abc之后的x不会打印

2.2 strncpy的使用

要想拷贝指定数量的元素可以使用strncpy

函数声明如下:

char * strncpy ( char * destination, const char * source, size_t num );

strcpy差不多,只是多了一个size_t num这个形参,这个是用来拷贝指定数量的
例子:

#include <stdio.h>
#include <string.h>
int main()
{char arr1[20] = { 0 };char arr2[] = "abcdef";strncpy(arr1, arr2,3);printf("%s\n", arr1);return 0;
}

代码运行结果如下:

在这里插入图片描述
只会将arr2中前面3个元素拷贝到arr1中

2.3 strcpy的模拟实现

strcpy是用来将两个数组中下标一致的元素,将source中的字符拷贝到destination中去,一个一个拷贝

代码如下:

写法一:

char* my_strcpy(char* dest, char* src)
{char* ret = dest;assert(dest != NULL);assert(src != NULL);while (*src) //当src中的元素不为'\0'时进入循环{*dest = *src;   //将src中的值赋给dest*src++;         //src++,找到下一个元素的地址*dest++;        //dest++,找到下一个元素的地址}*dest = *src;   //由于当src中的元素为'\0'时,循环结束了,'\0'不会赋值到dest中去,使用最后将'\0'赋值给destreturn ret;
}
int main()
{char arr1[20] = { 0 };char arr2[] = "abcdef";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

写法二:

```c
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* my_strcpy(char* dest, char* src)
{char* ret = dest;assert(dest != NULL);  //判断传入的指针不是空指针assert(src != NULL);while (*dest++ = *src++)// *dest = *src  将src的值拷贝到dest//拷贝完之后,通过指针偏移找到下一个元素//++是先使用后加{//因为只是拷贝元素,while里面不做什么事//使用while必须跟一个语句,使用加上了一个空语句//使用大括号里边可以不加,但是加上会更清晰一点;}return ret;
}
int main()
{char arr1[20] = { 0 };char arr2[] = "abcdef";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

3. strcat的使用和模拟实现

• 源字符串必须以 ‘\0’ 结束。
• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
• ⽬标空间必须可修改。

3.1 strcat的使用

函数声明如下:

char * strcat ( char * destination, const char * source );

strcat是将source中的元素追加到destination之后,可以理解为两个字符串的拼接

例子如下:

#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = "hello ";char arr2[] = "world";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

3.2 strncat

要想追加指定元素,可以使用strncat
代码如下:

#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = "hello ";char arr2[] = "worldabcdef";strncat(arr1, arr2,5);printf("%s\n", arr1);return 0;
}

运行结果如下:
在这里插入图片描述
只会将arr2中前五个元素追加到arr1中去,之后的元素则不会追加

3.3 strcat的模拟实现

strcat是先找到destination中的’\0’,然后再其后面开始追加元素
代码如下:

include <stdio.h>
#include <string.h>
#include <assert.h>char* my_strcat(char* dest, const char* src)
{char* ret = dest;assert(dest && src);while (*dest) //当dest中的元素不为'\0'时,dest++,找到'\0'的位置{dest++;}while (*dest++ = *src++)  //从'\0'之后的位置开始将src中的元素赋值给dest{;}return ret;
}
int main()
{char arr1[20] = "hello ";char arr2[] = "world";my_strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

4. strcmp 的使⽤和模拟实现

◦ 第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
◦ 第⼀个字符串等于第⼆个字符串,则返回0
◦ 第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字
◦ 比较的是两个元素的ASCII值

4.1 strcmp的使用

函数声明如下:

int strcmp ( const char * str1, const char * str2 );

比较str1和str2中下标相同元素的ASCII值
如果第一个元素相等时,则比较下一对元素的ASCII值
大于则返回一个大于零的值
小于则返回一个小于零的值
等于则返回零

例子:

#include <stdio.h>
#include <string.h>int main()
{char arr1[] = "abcd";char arr2[] = "abq";int ret = strcmp(arr1, arr2);if (ret > 0)printf("大于\n");else if (ret == 0)printf("等于\n");elseprintf("小于\n");return 0;
}

由于前两个元素相同,所以比较第三个元素的ASCII值
q的ASCII值大于c的ASCII值
所以会打印小于

4.2 strncmp

可以指定比较的元素个数
代码如下:

#include <stdio.h>
#include <string.h>int main()
{char arr1[] = "abcd";char arr2[] = "abq";int ret = strncmp(arr1, arr2,2);if (ret > 0)printf("大于\n");else if (ret == 0)printf("等于\n");elseprintf("小于\n");return 0;
}

由于只比较了前两个元素的ASCII值,前两个元素相等
所以会打印等于

4.3 strcmp的模拟实现

代码如下:

#include <stdio.h>
#include <string.h>
#include <assert.h>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;}
int main()
{char arr1[] = "abcd";char arr2[] = "abq";int ret = my_strcmp(arr1, arr2);if (ret > 0)printf("大于\n");else if (ret == 0)printf("等于\n");elseprintf("小于\n");return 0;
}
http://www.yayakq.cn/news/719640/

相关文章:

  • 萝卜建站分类信息专门做西装网站
  • wordpress如何建企业站网上书店网站建设规划书
  • 昆明餐饮网站建设佛山做网站3000
  • 飞沐网站建设公司北京中国矿山建设网站
  • 南通建设局网站查询北京WordPress爱好者
  • 网站获取访客qq号码苏州微网站制作
  • 可以自己做免费网站吗什么是自助网站
  • 南皮县网站建设做网站哪里找程序员
  • 什么叫网站定位小红书搜索指数
  • 淄博建设工程学校官方网站公司网站费用怎么做会计分录
  • 网络科技公司网站源码下载一流的内蒙古网站建设
  • 网站建设 合同晋中城市建设招标网站
  • 兖州网站制作智能建造的发展趋势
  • 建设银行网站连不上视频网站开发公司
  • 望城建设局网站禹城市住房和城乡建设局网站
  • 欧美做暖网站网址制作二维码
  • 南宁网站开发百度爱采购官网
  • 中国效能建设网站网站后台怎么建设
  • 关于网站建设的参考文献婚恋咨询网站运营
  • 网站提交了被收录后改怎么做做如美团式网站要多少钱
  • 怎么在网站做支付端口对接seo sem
  • 长春做网站的公司罗岗网站建设哪家好
  • 十大搞笑素材网站抖音搜索seo排名优化
  • 北京网站建设乐云seo杭州富阳建设局网站
  • 外贸搜素网站应用商店网站模板
  • 游戏源码网站免费百度浏览器网站入口
  • 博客建站程序免费制作企业宣传册制作工具
  • 网站建设应计入什么科目浦东建设网站制作
  • 做慕课的网站广州发际体育用品有限公司
  • 稻壳网站建设企业所得税率2022最新