strlen()函数
功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内
实现:
int strlen(const char *str) {
assert(str != NULL);
int len = 0;
while( (*str++) != '\0')
len++;
return len;
}
strcpy()函数
功能:字符串复制函数,strcpy把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。
实现:
char *strcpy(char *strDes, const char *strSrc) {
if(strSrc == NULL || strDes == NULL)
return NULL;
char *address = strDes;
while( (*strDest++ = *strSrc++) != '\0');
return address;
}
strstr()函数
功能:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
实现:
int strstr(char *string, char *substring) {
if(string == NULL || substring == NULL)
return -1;
int lenstr = strlen(string);
int lensub = strlen(substring);
if(lenstr < lensub)
return -1;
int i,j;
for(int i = 0; i < lenstr-lensub; ++i) {
for(j = 0; j < lensub; ++j) {
if(string[i+j] != substring[i])
break;
}
if(j == lensub)
return i;
}
return -1;
}
strcat()函数
功能:把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。
实现:
char* strcat(char* strDest, const char* strSrc) {
char* address = strDest;
assert( (strDest != NULL) && (strSrc != NULL) );
while(*strDest != '\0') //当strDest='\0'时结束,即为字符串的结尾,将strSrc添加到此处
strDest++;
while(*strSrc != '\0')
*strDest++ = *strSrc++;
*strDest = '\0';
return address;
}
strcmp()函数
功能:对两个字符串进行比较,若s1、s2字符串相等,则返回零;若s1大于s2,则返回正数;否则,则返回负数。
实现:
int strcmp(const char* str1, const char* str2) {
assert( (str1 != NULL) && (str2 != NULL) );
int ret = 0;
while( !(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str1 ) {//ret=0,相等,相等时要确定两个字符不为'\0'; ret!=0时,循环结束,判断ret值
str1++;
str2++;
}
if(ret > 0)
return 1;
else if(ret < 0)
return -1;
return 0;
}
memcpy()函数
功能::将str指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内,函数返回一个指向dest的指针.
实现:
void* memcpy(void *dest, const void *src, size_t n) {
if(dest == NULL || src == NULL)
return NULL;
char* pdest = (char*)dest;
char* psrc = (char*)src;
while(n--)
*pdest++ = *psrc++;
return dest;
}