strncat:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
char* my_strncat(char *str1,char *str2,int count)
{
assert(str1 && str2);
char *ret = str1;
while(*str1++)
{
;
}
str1--;
while(count--)
{
if(!(*str1++ = *str2++))
{
return ret;
}
*str1 = '\0';
}
return ret;
}
int main(int argc, char *argv[])
{
char arr1[30] = "abcdef";
char arr2[] = "lklklk";
int n = 0;
puts(arr1);
puts(arr2);
scanf("%d",&n);
my_strncat(arr1,arr2,n);
printf("arr1 = %s\n",arr1);
return 0;
}
strncpy:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
char *my_strncpy(char *str1,const char* str2,int count)
{
assert(str1 && str2);
char *ret = str1;
while(count && (*str1++ = *str2++))
{
count--;
}
if(count)
{
while(--count)
{
*str1++ = '\0';
}
}
return ret;
}
int main(int argc, char *argv[])
{
char arr1[30] = "abcdefgh";
char arr2[] = "lklk";
puts(arr1);
puts(arr2);
int n = 0;
scanf("%d",&n);
my_strncpy(arr1,arr2,n);
printf("arr1 = %s\n",arr1);
return 0;
}
strstr:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
char *my_strstr(const char *p1,const char *p2)
{
assert(p1 != NULL);
assert(p2 != NULL);
char *s1 = (char*)p1;
char *s2 = (char*)p2;
char *cur = (char*)p1;//强制转换,p1为const,受保护
if(*s2 == '\0')
{
return (char*)p1;
}
while(*cur)
{
s1 = cur;
s2 = (char*)p2;
while((*s1 != '\0') && (*s2 != '\0') && (*s1 == *s2))
{
s1++;
s2++;
}
if(*s2 == '\0')
{
return cur;
}
if(!*s1)
{
return NULL;
}
cur++;
}
return NULL;
}
int main(int argc, char *argv[])
{
char arr1[] = "abcdddefg";
char arr2[] = "dd";
puts(arr1);
puts(arr2);
char *ret = my_strstr(arr1,arr2);
if(ret == NULL)
{
printf("找不到\n");
}
else
{
puts(ret);
}
return 0;
}