Strcpy函數實作:
char* myStrcpy(char *dest, const char *src)
{
assert(dest != NULL && src != NULL);
char *address = dest;
while (*address++ = *src++)
{
NULL;
}
//*dest = '\0';
return dest;
}
Strncpy函數實作:
char* myStrncpy(char *dest, const char *src, char ch)
{
assert(dest != NULL && src != NULL);
char *address = dest;
while (*src)
{
while (*src == ch)
{
return NULL;
}
*address++ = *src++;
}
//*dest = '\0'; //這一句可以不要
return dest;
}
Strcmp函數實作:
int myStrcmp(const char *dest, const char *src)
{
assert(dest != NULL && src != NULL);
int ret = 0;
while (!(ret = *(unsigned char*)dest - *(unsigned char*)src) && *dest)
{
++dest;
++src;
}
if (ret > 0)
return 1;
else if (ret < 0)
return -1;
else
return 0;
Strncmp函數實作:
int myStrncmp(const char *dest, const char *src, int count)
{
assert(NULL != dest && NULL != src);
int ret = 0;
while (!(ret = *(unsigned char*)dest - *(unsigned char*)src) && count)
{
dest++;
src++;
count--;
}
if (ret > 0)
return 1;
else if (ret < 0)
return -1;
else
return 0;
}
Strchr函數實作:
//【傳回值】如果找到指定的字元則傳回該字元所在位址,否則傳回 NULL。
char* myStrchr(const char *src, int value)
{
assert(src != NULL);
//while (*src) // 當value為 '\0' 時這個方法錯誤
//{
// if (*src == (char)value)
// {
// return (char*)src;
// }
// *src++;
//}
//return NULL;
while (*src && *src != (char)value)
{
src++;
}
if (*src == (char)value)
return (char*)src;
return NULL;
}
Strrchr函數實作:
//【傳回值】如果找到指定的字元則傳回該字元所在位址,否則傳回 NULL。
char* myStrrchr(char *src, char ch)
{
assert(src != NULL);
int len = strlen(src);
int i;
int count = 0;
for (i = len; i > 0; i--)
{
if (*(src + i) == ch)
{
return (char*)ch;
}
count ++;
printf("count = %d\n", count);
}
return NULL;
}
strcat() 函數用來連接配接字元串,其原型為:
char *strcat(char *dest, const char *src);
【參數】dest 為目的字元串指針,src 為源字元串指針。
strcat() 會将參數 src 字元串複制到參數 dest 所指的字元串尾部;dest 最後的結束字元 NULL 會被覆寫掉,并在連接配接後的字元串的尾部再增加一個 NULL。
注意:dest 與 src 所指的記憶體空間不能重疊,且 dest 要有足夠的空間來容納要複制的字元串。
【傳回值】傳回dest 字元串起始位址。
Strcat函數實作:
char *myStrcat(char *dest, const char *src)
{
assert(NULL != dest && NULL != src);
char *address = dest; // 儲存dest的位址
while (*address) // 相當于 while (*address != '\0')
{
address++; // 位址向後偏移
}
while (*address++ = *src++)
{
NULL; //這一句可以不寫
}
//*dest = '\0'; //這一句是否可以省略
return dest;
}
Strncat 函數實作:
char *myStrncat(char *dest, const char *src, int num)
{
assert(NULL != dest && NULL != src);
char *address = dest;
while (*address)
{
address++;
}
while (num)
{
*address++ = *src++;
num--;
}
return dest;
}
功 能: 傳回字元串長度
用 法: int strlen(char *str);
Strlen函數實作:
int myStrlen(const char *dest)
{
int ret = 0;
while (*dest)
{
dest++;
ret++;
}
return ret;
}
部落格轉自:http://blog.chinaunix.net/uid-29339253-id-4737064.html