美做天然居家居网站高端营销型网站制作
美做天然居家居网站,高端营销型网站制作,wordpress爱客0.9,WordPress分页加载更多ajax1. strlen函数的使用和模拟实现
size_t strlen(const char* str);
1.1 函数功能以及用法
字符串长度
strlen函数的功能是计算字符串的长度。在使用时#xff0c;要求用户传入需要计算长度的字符串的起始位置#xff0c;并返回字符串的长度。
#include stdio.h
#…1. strlen函数的使用和模拟实现
size_t strlen(const char* str);
1.1 函数功能以及用法
字符串长度
strlen函数的功能是计算字符串的长度。在使用时要求用户传入需要计算长度的字符串的起始位置并返回字符串的长度。
#include stdio.h
#include string.hint main()
{char arr[] abcdef;int len strlen(arr);printf(%d\n, len);return 0;
}
1.2 函数的原理
该函数在得到字符串的起始位置之后会从该起始位置开始依次向后检索并计数直到遇到\0为止。
1.3 注意事项
1. 字符串以 \0 作为结束标志strlen函数返回的是在字符串中 \0 前⾯出现的字符个数不包 含 \0 )。
2. 参数指向的字符串必须要以 \0 结束。
3. 注意函数的返回值为size_t是无符号的 易错
针对第三点我们给出以下示例
#include stdio.h
#include string.h
int main()
{const char* str1 abcdef;const char* str2 bbb;if(strlen(str2)-strlen(str1)0)//出错{printf(str2str1\n);} else{printf(srt1str2\n);}return 0;
}
由于strlen函数返回值的类型为“size_t”(unsigned int)所以两个strlen函数返回值相减得到的结果的类型也是“size_t”而该类型的数据一定会是大于等于零的这与我们的代码所表达的意思不一致。
1.4 模拟实现
strlen的实现较为简单所以这里给出三种实现方式
1.4.1 计数器
在函数内部创建一个计数器用以记录字符的个数
size_t my_strlen1(const char* str)
{assert(str);size_t count 0;//计数器while(*str ! \0){count;str;}return count;
}
1.4.2 指针-指针
size_t my_strlen2(const char* str)
{assert(str);const char* strx str;while(*strx ! \0){strx;}return strx - str;//指针-指针
}
1.4.3 递归
size_t my_strlen3(const char* str)
{assert(str);if(*str \0)return 0;elsereturn 1 my_strlen3(str1);
}
2. strcpy函数的使用和模拟实现
char* strcpy(char * destination, const char* source);
2.1 函数功能以及用法
字符串拷贝
该函数会把“source”指向的字符串拷贝到“destination”指向的字符数组数组中包括\0。在使用时要求用户分别传入目标数组的起始地址和源字符串的起始地址并返回目标数组的起始地址
#include stdio.h
#include string.hint main()
{char name[20] {0};strcpy(name, zhangsan);printf(%s\n, name);return 0;
}
2.2 函数的原理
“destination”和“source”依次逐字节移动每次移动前将“source”指向的字符拷贝到“destination”指向的空间直到将\0拷贝到目标数组中为止。
2.3 注意事项
1. 源字符串必须以 \0 结束。
2. 会将源字符串中的 \0 拷⻉到⽬标空间。
3. ⽬标空间必须⾜够⼤以确保能存放源字符串。
4. ⽬标空间必须可修改。比如目标空间是处存放的是一个常字符串或者被const修饰的字符数组。
#include stdio.h
#include string.hint main()
{const char* p abcdef;char arr[] bit;strcpy(p, arr);return 0;
}
2.4 模拟实现
char* my_strcpy(char* dest, const char* src)
{assert(dest src);char* ret dest;while(*dest *src);return ret;
}
3. strcat函数的使用和模拟实现
char* strcat(char* destination, const char* source);
3.1 函数功能以及用法
字符串追加
该函数会将“source”指向的字符串追加到“destination”指向的字符数组的后面原本的\0会被覆盖源字符串的\0会被一起追加到字符数组之后(某些实现中可能是额外添加的\0)。在使用时要求用户分别传入目标数组的起始地址和源字符串的起始地址并返回目标数组的起始地址。
#include stdio.h
#include string.hint main()
{char arr1[20] hello ;strcat(arr1, world!);printf(%s\n, arr1);return 0;
}
3.2 函数的原理
首先找到目标数组结尾处的\0将其当作目标空间的起始地址的话接下来的步骤就与strcpy相同了。
3.3 注意事项
1. 源字符串必须以 \0 结束。
2. ⽬标字符串中也得有 \0 否则没办法知道追加从哪⾥开始。
3. ⽬标空间必须有⾜够的⼤能容纳下源字符串的内容。
4. ⽬标空间必须可修改。
5. 字符串自己给自己追加可能会出错。
#include stdio.h
#include string.hint main()
{char arr[20] hello;strcat(arr, arr);printf(%s\n, arr);return 0;
} 在第一个字符拷贝结束时arr结尾的\0就被覆盖了这时strcat函数就不知道追加应该何时停止。
3.4 模拟实现
char* my_strcat(char* dest, const char* src)
{assert(dest src);char* ret dest;while(*dest){dest;}while(*dest *src);return ret;
}
4. strcmp函数的使用和模拟实现
int strcmp(const char* str1, const char* str2);
4.1 函数功能以及用法
字符串比较
C语言标准规定
第⼀个字符串⼤于第⼆个字符串则返回⼤于0的数字 。
第⼀个字符串等于第⼆个字符串则返回0 。
第⼀个字符串⼩于第⼆个字符串则返回⼩于0的数字。
#include stdio.h
#include string.hint main()
{char arr1[20] zhangsan;char arr2[] zhangsanfeng;int ret my_strcmp(arr1, arr2);if(ret 0)printf(\n);else if(ret 0)printf(\n);elseprintf(\n);return 0;
}
4.2 函数的原理
按下标依次比较两个字符串元素的ascll码值。
4.3 注意事项
好像没什么好注意的。
4.4 模拟实现
int my_strcmp(const char* str1, const char* str2)
{assert(str1 str2);while(*str1 *str2){if(*str1 \0)return 0;str1;str2;}return (*str1 - *str2);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92296.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!