字符串函数的使用和模拟实现(四)

#include<string.h>

int main()

{

char arr130={"kongchao"};

char arr230={"hello world"};

strncpy(arr2,arr1,9);//拷贝九个是因为第九个字节是'\0'

printf("%s",arr2);

return 0;

}

strncpy函数模拟实现

#include<stdio.h>

#include<assert.h>

charstrncpy(chardest,char*src,int k)

{

assert(dest&&src);//判断非空

char*nb=dest;

while((*dest++ = *src++)&&(k--))

{

;

}

return nb;

}

int main()

{

char arr130={"ni shi hei ma"};

char arr230={"ni na nie"};

int k=0;

printf("请输入你要拷贝的字节数");//空格不算个数里面

scanf("%d",&k);

char*ret=my_strncpy(arr1,arr2,k);

printf("%s",arr1);//写ret也是一样的(都是arr1的首元素地址)

return 0;

}

2.strncat函数


函数的参数形式char*strncat(char*dest,const char*src,size_t num)

这个函数的形式简直和上面那个strncpy一模一样(他们的模拟实现也是基本一样的,

可以说strncpy是strncat的子集)注如果连接的个数大于源头个数,则还是连接源头个数。

函数使用:

#include<stdio.h>

#include<string.h>

int main()

{

char arr230={"zhangdahou"};

char arr130={"xiaoshihou"};

strncat(arr1,arr2,6);//连接6个

printf("%s",arr1);

return 0;

}

注意如果是这种strncat(arr1+n,arr2,8);其中n小于等于arr1的长度,则arr2还是连接到arr1后面,若大于则报错。

strncat函数模拟实现

#include<stdio.h>

#include<assert.h>

charmy_strncat(chardest,char*src)

{

assert(dest&&src);

char*ret=dest;//记下开始的位置

while(*++dest)

{

;

}

while(*dest++=*src++)

{

;

}

return ret;

}

int main()

{

char arr150={"kong chao yao "};

char arr230={"cheng wei da niu"};

char*kc= my_strncat(arr1,arr2);

printf("%s",kc);

return 0;

}

3.strncmp函数


函数的参数形式int strncmp ( const char * str1, const char * str2 ,size_t num);

size_t表示无符号整形,num表示字符比较的个数,返回类型str1>str2返回大于0的数

str1=str2返回0,str1<str2,返回小于0的数。(vs默认返回1 0 -1)。

函数的使用

#include<stdio.h>

#include<string.h>

int main()

{

char arr14 = { "asdf" };

char arr24 = { "ase" };

int dd=strncmp(arr1, arr2, 3);//arr1和arr2比较

printf("%d\n", dd);//结果是小于0的随机数

return 0;

}

strncmp函数模拟实现

#include<stdio.h>

#include<assert.h>

int my_strncmp(charstr1, charstr2,int k)

{

assert(str1&&str2);

while ((*str1== *str2) && (k--))

{

str1++; str2++;

if ((*str1 == '\0') || (k == 0))

{

return 0;

}

}

return *str1 - *str2;

}

int main()

{

char arr110 = { "abcdega" };

char arr210 = { "abcdeg" };

int kc = my_strncmp(arr1, arr2, 7);

printf("%d\n", kc);

return 0;

**最后的最后给个一键三连呗,**学有所成呀

最后

资料过多,篇幅有限

自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

return *str1 - *str2;

}

int main()

{

char arr110 = { "abcdega" };

char arr210 = { "abcdeg" };

int kc = my_strncmp(arr1, arr2, 7);

printf("%d\n", kc);

return 0;

**最后的最后给个一键三连呗,**学有所成呀

最后

外链图片转存中...(img-D9KF6Uxb-1718600564819)

外链图片转存中...(img-9RWH6rVA-1718600564820)

资料过多,篇幅有限

自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

相关推荐
2601_966949656 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
拓恒技术7 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
晨曦中的暮雨8 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
怕浪猫8 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
喵了几个咪8 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风8 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
罗西的思考10 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
淡海水10 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
2601_9628857210 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
Wang's Blog11 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友