字符串额模拟实现2

1.strncpy

#include "stdio.h"

#include "assert.h"

#include"windows.h"

#include "string.h"

char * my_strncpy(char *dstconst char *src,size_t num)

{

char *tmp = dst;

assert(dst != NULL);

assert(src != NULL);

while ((*dst++ = *src++)&&num)

扫描二维码关注公众号,回复: 269270 查看本文章

{

num--;

}//保证源字符串不为空时,不会以NULL结束

if (num)//当src的长度小于num

{

while (--num)//会对num影响

{

*(dst++) = "\0"; }

}

return tmp;

}

int main()

{

char arr1[40];

char arr2[] = "happy";

int len = sizeof(arr2);

printf("%s\n", my_strncpy(arr1, arr2, len));

system("pause");

return 0;

}

 

2.strncat

#include "stdio.h"

#include "assert.h"

#include"windows.h"

#include "string.h"

//前字符串与后字符串连接时不连接\0,在连接完之后添加

char * my_strncat(char *dstconst char *src,size_t num)

{

char *tmp = dst;//定义tmp指针指向char型dst指针

assert(dst != NULL);

assert(src != NULL);

while (*dst)

{

dst++;

}//先打印前字符串中的字符

while ((*dst++ = *src++) && num)//连接第一个与第二个字符串

{

num--;

}

*dst = '\0';//不连接\0,所以要添上\0;

return tmp;

}

int main()

{

char arr1[] = "haha";

char arr2[] = "to be or not";

printf("%s\n", my_strncat(arr1, arr2,5));

system("pause");

return 0;

}

3.strncmp

先从第一个开始比较,

当遇到与另一个不一样;

或者其中一个字符串结束;    / /则相同

或者num个字符都比较完,还没有出现字符串结束;   //前者大于后者

 

#include "stdio.h"

#include "assert.h"

#include"string.h"

#include "windows.h"

int * my_strncmp( const char *str1, const char *str2,size_t num)

{

assert(str1 != NULL);

assert(str2 != NULL);

while (num--)

{

if (*str1++ == *str2++)//将num个字符比完

{

if (*str1 == '\0')//其中一个字符串结束

return 0;//则说明相同

}

}

return *str1 - *str2;//num个字符串已经比完,字符串还没有结束,则说明前者大

}

int main()

{

char arr[][7] = { "hahaha", "hehehe", "hahahe"};

int i = 0;

for (i = 0; i < 3; i++)

{

if (my_strncmp(arr[i], "hahaxx", 4) == 0)

{

printf("%s\n", arr[i]);

}

}

system("pause");

return 0;

}

猜你喜欢

转载自blog.csdn.net/ning_zhi_t/article/details/78634742