C函式:strlen,strcat,strncat,strcmp,strncmp,strcpy,strncpy,strstr詳解
strlen()
原型:size_t strlen( const char *string );
功能:計算給定字串的(unsigned int型)長度,不包括'\0'在內
說明:返回s的長度,不包括結束符NULL。
//strlen(遞迴實現)
int my_strlen(const char* str)
{
if (*str == '\0')
return 0;
return 1 + my_strlen(++str);
}
strcat()
char *strcat( char *strDestination, const char *strSource );
功能:把src所指字串新增到dest結尾處(覆蓋dest結尾處的'\0')。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。
//strcat
char* my_strcat(char* dest, char* src)
{
//判空
assert(dest);
assert(src);
char* ret = dest;
while (*dest != '\0')
++dest;
while (*dest++ = *src++)
;
*dest = '\0';
return ret;
}
strncat()
char *strncat( char *strDest, const char *strSource, size_t count );
功能:把src所指字串的前n個字元新增到dest所指字串的結尾處,並覆蓋dest所指字串結尾的'\0',從而實現字串的連線。
說明:src和dest所指記憶體區域不可以重疊,並且dest必須有足夠的空間來容納src的字串
//strncat
char* my_strncat(char* dest, const char* src, int number)
{
assert(dest != NULL&& src != NULL);
char* ret = dest;
while (*++dest != '\0')
;
while (number-- && (*dest++ = *src++))
;
*dest = '\0';
return ret;
}
strcmp()
int strcmp( const char *string1, const char *string2 );
當s1<s2時,返回為負數;
當s1==s2時,返回值= 0;
當s1>s2時,返回正數。
即:兩個字串自左向右逐個字元相比(按ASCII值大小相比較),直到出現不同的字元或遇'\0'為止。如:
"A"<"B" "a">"A" "computer">"compare"
特別注意:strcmp(const char *s1,const char * s2)這裡面只能比較字串,即可用於比較兩個字串常量,或比較陣列和字串常量,不能比較數字等其他形式的引數。
ANSI標準規定,返回值為正數,負數,0 。而確切數值是依賴不同的C實現的
//strcmp(按照ASCII碼值比較)
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 != NULL && str2 != NULL);
int ret = 0;
while ((ret = *str1 - *str2) && str1++)
str2++;
if (ret < 0)
return -1;
else if (ret>0)
return 1;
return 0;
}
strncmp()
int strncmp( const char *string1, const char *string2, size_t count );
//strncmp
int my_strncmp(const char* str1, const char* str2, int number)
{
assert(str1 != NULL && str2 != NULL);
int ret = 0;
while ((ret = *str1 - *str2) && str1++ && number--)
str2++;
if (ret < 0)
return -1;
else if (ret > 0)
return 1;
return 0;
}
strcpy()
char *strcpy( char *strDestination, const char *strSource );
功能:把從src地址開始且含有NULL結束符的字串複製到以dest開始的地址空間
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。
//strcpy
char* my_strcpy(char* dest, const char* src)
{
assert(dest != NULL&& src != NULL);
char* ret = dest;
while ((*dest++ = *src++)!='\0')
;
*dest = '\0';
return ret;
}
strncpy()
char *strncpy( char *strDest, const char *strSource, size_tcount );
//strncpy
char* my_strncpy(char* dest, const char* src, int number)
{
assert(dest != NULL&& src != NULL);
char* ret = dest;
while (*dest++ = *src++ && number--)
;
*dest = '\0';
return ret;
}
strstr()
strstr(str1,str2) 函式用於判斷字串str2是否是str1的子串。如果是,則該函式返回str2在str1中首次出現的地址;否則,返回NULL
//strstr
char* my_strstr(const char *string, const char *strCharSet)
{
assert(NULL != string&&NULL != strCharSet);
char* ptr = string;
while (NULL != string)
{
string = ptr;
while (*string != '\0'&&*strCharSet != '\0')
{
if (*string++ == *strCharSet++)
;
else
{
ptr++;
break;
}
}
if (*strCharSet == '\0')
return ptr;
}
return 0;
}