自我实现string.h库函数相关内容
一、求字符串长度:strlen();
库函数中为size_t strlen ( const char * str );
参数 str 为一个指向一个字符串的 const char*型的指针,返回值为该字符串的长度('\0'不算在其中)(size_t为无符号整型)。
下面自行实现该函数:
size_t myStrlen(const char* str){
if (str == NULL){
return 0;
}
size_t len = 0;
while (*str != '\0') {
len++;
str++;
}
return len;
}
二、在字符串后面追加内容:strcat();
库函数中为char * strcat ( char * destination, const char * source );
把 sour 所指向的字符串追加到 dest 所指向的字符串的结尾(会在 dest 的结尾追加'\0'),该函数返回一个指向最终的目标字符串 dest 的指针。
下面自行实现该函数:
char* myStrcat(char* dest, const char* sour){
if (sour == NULL || dest == NULL){
return NULL;
}
char* p = dest;
while (*p != '\0'){
p++;
}
while (*sour != '\0'){
*p = *sour;
p++;
sour++;
}
*p = '\0';
return dest;
}
三、字符串拷贝:strcpy();
库函数中为char * strcpy ( char * destination, const char * source );
把 src 所指向的字符串复制到 dest 中,该函数返回一个指向最终的目标字符串 dest 的指针。
下面自行实现该函数:
char* myStrcpy(char* dest, const char* sour){
if (dest == NULL || sour == NULL){
return NULL;
}
char* p = dest;
while (*sour != '\0'){
*p = *sour;
p++;
sour++;
}
*p = '\0';
return dest;
}
四、字符串比较大小:strcmp();
库函数为int strcmp ( const char * str1, const char * str2 );
比较 str1 和 str2 的字典序,若 str1 >str2 返回一个大于0的数,若 str1 < str2 返回一个小于0的数,若 str1 == str2 返回0;
下面自行实现该函数:
int myStrcmp(const char* str1, const char* str2){
assert(str1 != NULL&&str2 != NULL);//注意assert()需要引入头文件assert.h
while (*str1 != '\0' || *str2 != '\0'){
if (*str1 > *str2){
return 1;
}
else if (*str1 < *str2){
return -1;
}
str1++;
str2++;
}
return (int)(*str1 - *str2);
//下面这种方法也可以
//if (*str1 == '\0'&&*str2 == '\0'){
// return 0;
//}
//if (*str1 == '\0'){
// return -1;
//}
// return 1;
}
五、在字符串中查找子串:strstr();
库函数中为char * strstr ( char * str1, const char * str2 );
在字符串 str1 中查找第一次出现字符串 str2 的位置,若找到,则返回 str1 中第一次出现 str2 的位置;未找到则返回NULL。
下面自行实现该函数:
char* myStrstr(char* str1, char* str2){
if (str1 == NULL || str2 == NULL){
return NULL;
}
char* p1 = str1;
char* p2 = str2;
char* p3 = p1;
while (*p1 != '\0'){
p3 = p1;
p2 = str2;
while (*p2 != '\0'&&*p3 != '\0'){
if (*p2 == *p3){
p2++;
p3++;
}
else{
break;
}
}
//找到了
if (*p2 == '\0'){
return p1;
}
p1++;
}
return NULL;
}