string.h中的函数后续
strcat()与strncat
strcat(str1,str2):将str2的内容复制到str1后面。
strncat(str1,str2,n):j将str2前n个内容复制到str1后面。
注意:在strncat()在复制完前n项后如果没有复制到‘\0’,则会自动补一个‘\0’.
mystrcat()
#include<stdio.h>
#include<assert.h>
char *mystrcat(char *dest,const char *src)
{
assert(dest!=0 && src!=0);
char *pdest = dest;
while(*dest != '\0')
{
dest++;
}
while((*dest++ = *src++) != '\0');
return pdest;
}
mystrncat()
#include<stdio.h>
#include<assert.h>
char *mystrncat(char *dest,const char *src,size_t n)
{
assert(dest!=NULL && src!=NULL);
char *pdest=dest;
while(*dest !='\0')
{
dest++;
}
while(n-- >0 && (*dest++ =*src++) !='\0');
dest='\0';
return pdest;
}
strcmp() 与 mstrncmp()
strcmp(str1,str2): 比交两个字符串的大小,str1>str2 返回1,str1<str2返回-1,str1 == str2 返回0;
strncmp(str1,str2,n):只比交两个字符串前n项的大小,str1>str2 返回1,str1<str2返回-1,str1 ==str2 返回0;
注意:比较字符串的大小比较的是他们的字符的ASCII码;
mystrcmp()
int mystrcmp(const char *s1,const char *s2)
{
assert(s1!=NULL && s2!=NULL);
while(*s1!='\0' && *s2!='\0' && *s1==*s2)
{
s1++;
s2++;
}
return *s1-*s2;
}
mystrncmp()
int mystrncmp(const char *s1,const char *s2)
{
assert(s1!=NULL && s2!=NULL);
while(n-- > 1 && *s1!='\0' && *s2!='\0' && *s1==*s2)
{
s1++;
s2++;
}
return *s1-*s2;
}
我返回的是*s1-*s2,所以返回的是正数代表s1>s2,负数代表s1<s2,0代表s1==s2;