字符串训练(二)模拟实现strstr strncpm strncat strncpy函数

来源:互联网 发布:cp1200写频软件下载 编辑:程序博客网 时间:2024/06/08 05:13

1、模拟实现strncat函数

//模拟实现strncat#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>char * mystrncat(char *dest, const char *src, int n){char *destbak = dest;assert(NULL != dest && NULL != src  );while ( '\0' != *dest){dest++;}while (n > 0 && ('\0' != *src)){*dest++ = *src++;  //这句话放在while循环中,最后面也要加上*dest = '\0'这条语句。n--;}*dest = '\0';return destbak;}int main(){char array[100] = "hello world";char *p = "abcdef";mystrncat(array, p,10);printf("array = %s\n",array);printf("hello...\n");system("pause");return 0;}


2、模拟实现strncpy函数

#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>char * mystrncpy(char *dest, const char *src, int n){char *destbak = NULL;int i = 0;assert(NULL != dest && NULL != src);for (i = 0 ; i < n; i++)      //从这可以看出当拷贝的字符数没有\0时,这个函数不会加上\0,所以使用这个函数要小心\0.{*dest = *src;if ('\0' == *src ){dest++;}else{dest++;src++;}}return destbak;}int main(){char array[100] = { 0 };char *p = "abcdef";mystrncpy(array, p,10);printf("array = %s\n",array);printf("hello...\n");system("pause");return 0;}



3、模拟实现strncmp函数

#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>int mystrncmp(const char *str1, const char *str2, int n){assert(NULL != str1 && NULL != str2);while (n > 0 && *str1 == *str2){if ('\0' == *str1){return 0;}str1++;str2++;n--;}if (0 == n ){return 0;}if (*str1 > *str2){return 1;}elsereturn -1;}int main(){char *p = "abjdidfe";char *p2 = "abdidfe";int ret = 0;ret = strncmp(p,p2,3);if (0 == ret){printf("p1 = p2\n");}else if(ret > 0)printf("p1 > p2\n");else printf("p1 < p2\n");printf("hello...\n");system("pause");return 0;}



4、模拟实现strstr函数(两种方法)

#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>//标志法char *mystrstr1(const char *string, const char *strCharSet){assert(NULL != string && NULL != strCharSet);if('\0' ==*strCharSet)   //当要找的是空串的时候,特殊处理。{return (char *)string;}while ( '\0' != *string ){int flag = 1;const char *stringbak = string;const char *strCharSetbak = strCharSet;while ('\0' !=  *strCharSetbak){if (*stringbak != *strCharSetbak){flag = 0;break;}else{stringbak++;strCharSetbak++;}}if (1 == flag){return (char*)string;}string++;}return NULL;}//方法二:利用字符串的结束标志去写。char *mystrstr2(const char *string, const char *strCharSet){assert(NULL != string && NULL != strCharSet);if('\0' ==*strCharSet)   //当要找的是空串的时候,特殊处理。{return (char *)string;}while ( '\0' != *string ){const char *stringbak = string;const char *strCharSetbak = strCharSet;/*while ('\0' !=  *strCharSetbak){if (*stringbak != *strCharSetbak){break;}else{stringbak++;strCharSetbak++;}}*/while (('\0' !=  *strCharSetbak) && (*stringbak == *strCharSetbak) )  //上面注释的简洁版本。{stringbak++;strCharSetbak++;}if ('\0' == *strCharSetbak){return (char*)string;}string++;}return NULL;}int main(){char *p1 = "abbcdef";char *p2 = "bbc";printf("p2 = %s\n",mystrstr1(p1,p2));printf("p2 = %s\n",mystrstr2(p1,p2));printf("hello...\n");system("pause");return 0;}


0 0