自定义各种字符串函数 C 语言

strlen

字符串长度

计数器版


#include 
#include #define MAX1 50//size_t和unsigned int 是一样的,表示无符号整型,字符串长度不会是负数 
unsigned int my_strlen(const char* arr)
{assert(arr!=NULL);unsigned int count=0;while(*arr++!='\0'){count++;}return count;
}int main()
{char arr[MAX1]="";printf("请输入你的字符串:\n");gets(arr);printf("字符串长度为:%d\n",my_strlen(arr));return 0;} 

递归版

指针-指针


strcpy

字符串拷贝


//模拟实现strcpy
//字符串的拷贝
//strcpy()有两个参数,目标空间的起始地址,原空间的起始地址#include 
#include 
#include #define MAX1 50
#define MAX2 50char* my_strcpy(char* dest, const char* src)//const保证,src不会被修改,如果while判断条件写反了,会报错 
{//while (*src != '\0')//{//    *dest = *src;//    dest++;//    src++;//}//把src中‘\0’之前的元素全都放在dest中了,此时的*src中只剩下‘\0’了//// //还要把'\0'也放进去//*dest = *src;assert(dest != NULL);//断言,如果括号里的dest为NULL时,会自动报错,需引头文件#include ,为假则报错 assert(src != NULL);char* ret=dest;//先保存下dest的起始地址 while (*dest++ = *src++)//当src到‘\0’时,\0的ASCII码值为0,等式为假,循环结束{;}return ret;//返回目标空间dest的起始地址 
}int main()
{char arr1[MAX1] = "";printf("请输入第一个字符串:\n");gets(arr1);char arr2[MAX2] = "";printf("请输入第二个字符串:\n");gets(arr2);/*strcpy(arr1, arr2);printf("%s\n", arr1);*/my_strcpy(arr1, arr2);printf("拷贝后的字符串内容为:\n");printf("%s\n", arr1);return 0;
}

strcat

字符串追加


#include 
#include #define MAX1 50
#define MAX2 50char* my_strcat(char * destination,const char* src)
{assert(destination&&src);char* ret=destination;//将destination的地址保存一下 //1、找到目标字符串的\0//2、把源数据追加上去,包含\0while(*destination){destination++;} //当*dest指向\0时,跳出while,此时,*dest指的就是\0//此时追加源字符串while(*destination++=*src++)//一个一个赋值,当*str指向\0时,跳出while {;} return ret;
}int main()
{char arr1[MAX1]="";printf("请输入第一个字符串:\n");gets(arr1);char arr2[MAX2]="";printf("请输入要追加的字符串:\n");gets(arr2);my_strcat(arr1,arr2);printf("追加后的字符串为:\n");printf("%s\n",arr1);return 0;
}

strcmp

字符串比较


#include 
#include 
#include int my_strcmp(const char* s1,const char* s2)
{assert(s1&&s2);while(*s1==*s2){if(*s1=='\0')//只有相等才能进while,所以当*s1='\0'时,代表*s2也等于'\0' {return 0;} s1++;s2++;}//当*s1和*s2不相等时,跳出循环,此时s1,s2指向的是那两个不相同的数,然后进入if语句 
//    if(*s1>*s2)
//    {
//        return 1;
//    }
//    else
//    {
//        return -1;
//    }//或者直接return *s1-*s2; return *s1-*s2;
}int main()
{char* p="abcdegh";char* q="dfgdfg";int ret=my_strcmp(p,q);printf("%d",ret);return 0;
}

strstr

判断是否是子串


#include 
#include char* my_strstr(const char* str1,const char* str2)
{assert(str1&&str2);const char* s1=NULL;const char* s2=NULL;const char* cp=str1;while(*cp){s1=cp;s2=str2;while(*s1&&*s2&&(*s1==*s2)){s1++;s2++;}if(*s2=='\0'){return (char*)cp;}cp++;}return NULL;
}int main()
{char arr1[]="addfsdfdg";char arr2[]="fsdf";char* ret=my_strstr(arr1,arr2);if(ret==NULL){printf("没找到\n");}else{printf("找到了:%s\n",ret);}return 0;} 

strtok

strerror


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部