#include <string.h>文件函数详解
1.strlen()
在这里插入代码片
#include <stdio.h>
#include <stdlib.h>
//此部分为直接调用string库里的strlen()函数
//int main() {
// char *str="hello";
// printf("%d\n",strlen(str));
// return 0;
//}
// strlen实现机理
int mylen(char *str);
int main(int argc,char *argcment) {
char *str="hello world!";
int length= mylen(str);
printf("%d",length);
}
int mylen(char *str) {
// char *str="hello";
int index=0;
while(str[index]!='\0') {
index++;
}
// printf("index=%d",index);
return index;
}
2.strcmp()
在这里插入代码片
#include <stdio.h>
#include <string.h>
//直接调用string的strcmp()函数
int main(int argc,char *argv[]){
char *a="hello ";
char *b="hello";
printf("%d",strcmp(a,b));
return 0;
}
//实现机理
//int mycmp(char *a,char *b);
//int main(int argc,char *argv[]) {
// char *a="hello ";
// char *b="hello";
// int ret=mycmp(a,b);
// if(ret==0) {
// printf("same");
// } else if(ret>0) {
// printf("a more big");
// } else {
// printf("b more big");
// }
// return 0;
//}
//int mycmp(char *a,char *b) {
// //method 1,利用数组的方式
int idx=0;
while(a[idx]==b[idx]&&a[idx]!=0){
idx++;
}
return a[idx]-b[idx];
//
method 2,利用指针的方式
// while(*a==*b &&*a!='\0') {
// a++;
// b++;
// }
// return *a-*b;
//}
3.strcpy()
在这里插入代码片
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//实现机理
char* mystr(char* dst,char* str) {
int idx=0;
// while(str[idx]!='\0'){
// dst[idx]=str[idx];
// idx++;
// }
// dst[idx]='\0';
// return dst;
//指针
char *rest=dst;
while(*str!='\0') {
*dst=*str;
str++;
dst++;
}
*dst='\0';
return rest;
}
int main(int argc,char const *argv[]) {
char* s1="abc";
char* s2=(char*)malloc(strlen(s1)+1);
mystr(s2,s1);
printf("%s",s2);
free(s2);
return 0;
}
4.strcat()
在这里插入代码片
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//int main(int argc,char* argv[]){
// //注意s1的空间必须足够大
// char s1[10]="abc";
// char* s2="-hello";
// strcat(s1,s2);
// printf("%s",s1);
// return 0;
//}
//实现机理
char *mycat(char* s1,char*s2);
int main(int argc,char* argv[]){
char s1[20]="hello";
char* s2="abcdef";
mycat(s1,s2);
printf("%s",s1);
return 0;
}
char *mycat(char* s1,char*s2){
//数组
// int idx=0;
// while(s1[idx]!='\0'){
// idx++;
// }
// int idx2=0;
// while(s1[idx2]!='\0'){
// s1[idx]=s2[idx2];
// idx++;
// idx2++;
// }
// return s1;
//指针
char* ret=s1;
//s1的长度是5,strlen(s1)=5,也就是s2添加到hello后面即复制后是helloabcdef
//strcpy(s1+strlen(s1),s2);中的s1+strlen(s1)将要复制的字符串从s1+5位置开/始放置
//如果是strcpy(s1,s2);则s1变成s2了,就不是连接了而是替换了
strcpy(s1+strlen(s1),s2);
return ret;
}
5.strchr()
在这里插入代码片
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[]) {
char s[]="hello";
char *p=strchr(s,'l');
//正常获取
printf("%s\n",p);
//获取he;
char c=*p;
*p='\0';
char *t=(char*)malloc(strlen(s)+1);
strcpy(t,s);
printf("%s",t);
free(t);
*p=c;
//
return 0;
}