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