各位少年,大家好,我是博主那一脸阳光
,今天给大家分享字符函数的使用与模拟实现。
前言:如果你想使用一个锤子非常方便,直接使用做好的就行,但是锤子是怎么构成的,你就不知所云了,模拟实现字符串,有助于提高我们的编程的能力与使用,
strlen的使⽤和模拟实现
strlen函数是用来计算字符串的长度的,遇到斜杠0就停止计算机。
原型如下:size_t strlen ( const char * str );
```c
#include<stdio.h>int main(){if((int)strlen("abc")-(int)strlen("abcdef")>0){printf("大于\n");}else{printf("小于等于\n);}
return 0;
}
• 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前⾯出现的字符个数(不包含 ‘\0’ )。
• 参数指向的字符串必须要以 ‘\0’ 结束。
• 注意函数的返回值为size_t,是⽆符号的( 易错 )
• strlen的使⽤需要包含头⽂件
• 学会strlen函数的模拟实现
strlen的模拟实现:
⽅式1:
int my_strlen(const char * str)
{int count = 0;assert(str);while(*str){count++;str++;}return count;
}
⽅式2:
//不能创建临时变量计数器
int my_strlen(const char * str)
{assert(str);if(*str == '\0')return 0;elsereturn 1+my_strlen(str+1);
}
//指针-指针的⽅式
int my_strlen(char *s)
{assert(str);char *p = s;while(*p != ‘\0’ )p++;return p-s;
}
strcpy 的使⽤和模拟实现
char* strcpy(char * destination, const char * source );
• Copies the C string pointed by source into the array pointed by destination, including the
terminating null character (and stopping at that point).
• 源字符串必须以 ‘\0’ 结束。
• 会将源字符串中的 ‘\0’ 拷⻉到⽬标空间。
• ⽬标空间必须⾜够⼤,以确保能存放源字符串。
• ⽬标空间必须可修改。
• 学会模拟实现。
strcpy叫做字符串拷贝 把source
内容拷贝进destination
#include<stdio.h>
int main()
{char arr1[20] = "xxxxxxxxxxxx";char arr2[] = "hello";strcpy(arr1, arr2);printf("%c\n", arr1);return 0;
}
上面这段代码 中str1指向第一个字符x,第二个arr指向h,所以这段字符。
是把arr2拷进去arr1字符里头去。那原先的就被替换表,但大家想想斜杠0在哪里呢?
很显然0保存了下来,但并不是斜杠0, 因为斜杠0是字符串结束标志
所以斜杠0没了,0保存了,
但是当你打印这个字符的数组的时候不会打印出来!
### 模拟实现//1.参数顺序
//2.函数的功能,停⽌条件
//3.assert
//4.const修饰指针
//5.函数返回值
//6.题⽬出⾃《⾼质量C/C++编程》书籍最后的试题部分
char *my_strcpy(char *dest, const char*src)
{ char *ret = dest;assert(dest != NULL);assert(src != NULL);while((*dest++ = *src++)){;}return ret;
}
strcat 的使⽤和模拟实现
• Appends a copy of the source string to the destination string. The terminating null character
in destination is overwritten by the first character of source, and a null-character is included
at the end of the new string formed by the concatenation of both in destination.
• 源字符串必须以 ‘\0’ 结束。
• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
• ⽬标空间必须可修改。
• 字符串⾃⼰给⾃⼰追加,如何?
#include<stdio.h>
int main()
{char arr1[20] = { "cb"};char arr2[] = "abcdef";printf("%s\n", strcat(arr1, arr2));return 0;
}
上面代码中,我们把arr2和arr1拼接在一起使用,就像拼图一样链接在一起的。
char *my_strcat(char *dest, const char*src)
{char *ret = dest;assert(dest != NULL);assert(src != NULL);while(*dest){dest++;}while((*dest++ = *src++)){;}return ret;
}
上面我们模拟实现了stcat函数,我们通过while循环找到斜杠,然后斜杠0可以理解为0
下面代码通过循环把斜杠0的位置进行交换。
stcmp字符比较模拟实现
int strncmp ( const char * str1, const char * str2, size_t num );
⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀
样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0
好先分享到这里,祝大家新年快乐,心想事成万事如意,