C语言的字符函数的使用与模拟实现

各位少年,大家好,我是博主那一脸阳光,今天给大家分享字符函数的使用与模拟实现。
前言:如果你想使用一个锤子非常方便,直接使用做好的就行,但是锤子是怎么构成的,你就不知所云了,模拟实现字符串,有助于提高我们的编程的能力与使用,

strlen的使⽤和模拟实现

strlen函数是用来计算字符串的长度的,遇到斜杠0就停止计算机。
原型如下:size_t strlen ( const char * str );

```c
#include
 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;
 else
 return 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
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在哪里呢?
C语言的字符函数的使用与模拟实现_第1张图片

很显然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
int main()
{
	char arr1[20] = { "cb"};
	char arr2[] = "abcdef";
	printf("%s\n", strcat(arr1, arr2));
	return 0;
}

C语言的字符函数的使用与模拟实现_第2张图片
上面代码中,我们把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
C语言的字符函数的使用与模拟实现_第3张图片

好先分享到这里,祝大家新年快乐,心想事成万事如意,

你可能感兴趣的:(c语言,开发语言)