如果本文对大家有用的话,请留下个赞吧( ﹡ˆoˆ﹡ )
如果大家有好的意见或者疑问请留在评论区,看见了一定认真考虑!O(∩_∩)O~~
- strlen函数
函数原型:size_t strlen(const char *string);
作用:返回字符串长度
实现:从第一个字符开始数,直到遇见\0停止(\0不算入其中,遇见空格也算入其中)。
例子:
#include<stdio.h>
#include<string.h>
int main(){
char arr[]="I love China"
int len =strlen(arr);
printf("%d",len);
}
最终输出结果为:12
注意事项:
即size_t-size_t一定的结果是按无符号的解读的(一定大于等于0)
例如:strlne("abc")-strlen("abcd")是大于零的
模拟实现:
1.循环版
#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str) {
assert(str);
int count = 0;//计数
while (*str++ != '\0')
count++;
return count;
}
int main() {
char arr[] = "I love China";
int len = my_strlen(arr);
printf("%d", len);
}
2.递归版
#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str) {
assert(str);
if (*str++ != '\0') return 1 + my_strlen(str);
return 0;
}
int main() {
char arr[] = "I love China";
int len = my_strlen(arr);
printf("%d", len);
}
3.指针-指针版
#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str) {
assert(str);
const char* end = str;
while (*end != '\0')end++;//end最终指向\0;
return end-str;
}
int main() {
char arr[] = "I love China";
int len = my_strlen(arr);
printf("%d", len);
}
- strcpy函数
函数原型:char* strcpy(char *destination,const char * source)
作用:将指针source指向的字符串拷贝到指针destination指向的空间中,destination中原有的被替代,但是没有被拷贝的地方内容不变(\0会被拷贝,所以后面的打印的时候不会出现)
如图:
实现:从source开始向后一直到遇见\0为止,\0也会拷贝;最后返回指针destination指向位置。
例子:
#include<stdio.h>
#include<string.h>
int main() {
char str1[20] = {”####“};
char str2[] = "I love China";
printf("%s", strcpy(str1, str2));
return 0;
}
最终输出结果为:I love China
注意事项:
ps:如果源字符串没有\0,就会出现以下结果,如图:
ps:destination不能是const char *类型
ps:当目标空间较小,不能完全拷贝,就会越界访问,但是还是会强行将后面的拷贝进去。
模拟实现:
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* destination, const char* source) {
assert(destination);
assert(source);
char* str1 = destination;
const char* str2 = source;
while (*str1++ =*str2++) ;
return destination;
}
int main() {
char str1[20] = {"################"};
char str2[] = "II love China";
printf("%s", my_strcpy(str1, str2));
return 0;
}
- strcat函数
函数原型: char *strcat(char *strDest,const char *strSrc) ;
作用:将strSrc指向的字符串连接到strDest指向字符串的后面(strSrc的\0也会过去)
实现:找到*strDest中的\0,然后从\0开始连接,直到遇见 *strSrc中的\0为止。(连接过程与strcpy有点相似),最后返回指针strDest指向位置。
例子:
#include<stdio.h>
#include<string.h>
int main() {
char strDest[20] = "holle ";
const char strSrc[] = "world!";
printf("%s", strcat(strDest, strSrc));
}
最终输出为:holle world!
注意事项:
ps:三个注意事项的错误结果同strcpy
模拟实现:
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* Dest, const char* Src) {
assert(Dest);
assert(Src);
char* str = Dest;
while (*++str);
while (*str++ = *Src++);
return Dest;
}
int main() {
char strDest[20] = "holle ";
const char strSrc[] = "world!";
printf("%s", my_strcat(strDest, strSrc));
}