首页 > 代码库 > C语言常见字符串函数实现
C语言常见字符串函数实现
#include <stdio.h>#include <stdlib.h>#include <assert.h>int my_strlen(char *s){ assert(s!=NULL); int count=0; while(*s!=‘\0‘) { s++; count++; } return count;}char *my_strcpy(char *s1,const char *s2){ assert(s1!=NULL); assert(s2!=NULL); char *res=s1; while(*s2!=‘\0‘) { *s1=*s2; s1++;//s1,s2均指向未赋值的下一个字节 s2++; } *s1=‘\0‘; return res;}char *my_strncpy(char *s1,const char *s2,int n){ assert(s1!=NULL); assert(s2!=NULL); char *res=s1; while(*s2!=‘\0‘&&n) { *s1=*s2; s1++; s2++; n--; } *s1=‘\0‘; return res;}char *my_strchr(char *str,int c){ assert(str!=NULL); while(*str!=‘\0‘) { if(*str==(char)c) return str; else str++; } return NULL;}char *my_strstr(const char *str,char *sub){ assert(str!=NULL&&sub!=NULL); char *s=str; char *t=sub; int len=0; for(;*s!=‘\0‘;s++) { while(*t!=‘\0‘&&*s==*t) { s++; t++; len++; } if(*t==‘\0‘) return s-len; } return NULL;}char *my_strcat(char *s1,const char *s2){ assert(s1!=NULL); assert(s2!=NULL); char *res=s1; while(*s1!=‘\0‘) s1++; while(*s2!=‘\0‘) { *s1=*s2; s1++; s2++; } *s1=‘\0‘; return res;}int my_strcmp(const char *s1,const char *s2){ assert(s1!=NULL); assert(s2!=NULL); while(*s1!=‘\0‘&&*s2!=‘\0‘&&*s1==*s2) { s1++; s2++; } return *s1-*s2;}char *my_strdup(char *s){ assert(s!=NULL); int len=0; char *dup=(char*)malloc(sizeof(char)*(len+1)); if(NULL==dup) return NULL; while(*s!=‘\0‘) { *dup=*s; dup++; s++; len++; } *dup=‘\0‘; return dup-len;}void *my_memset(void* buffer,int c,int n){ assert(buffer!=NULL); char *p=(char*)buffer; while(n--) { *p=(char)c; p++; } return buffer;}//拷贝内存块,不考虑内存重叠void *my_memcpy(void *to,const void *from,int n){ assert((to!=NULL)&&(from!=NULL)); char *res=(char *)to; char *t=(char*)to; char *f=(char*)from; assert((t<f)||(t>f-n+1)); while(n--) { *t=*f; t++; f++; } return res;}void *my_memmove(void *to,void *from,int count){ assert((to!=NULL)&&(from!=NULL)); char *res=(char*)to; char *des=(char*)to; char *src=http://www.mamicode.com/(char*)from;"strlen"; int len=my_strlen(str); printf("my_strlen:%d\n",len); //my_strcpy my_strncpy char s1_cpy[10]="str"; char s2_cpy[10]="cpy"; char *s_cpy=my_strcpy(s1_cpy,s2_cpy); printf("%s\n",s_cpy); //my_strncpy char s1_ncpy[20]="strncpy"; char s2_ncpy[10]="strn"; char *s_ncpy=my_strncpy(s1_ncpy,s2_ncpy,3); printf("%s\n",s_ncpy); //my_strcat char s1_cat[20]="strcat"; char s2_cat[10]="after"; char *s_cat=my_strcat(s1_cat,s2_cat); printf("%s\n",s_cat); //my_strcmp char s1_cmp[10]="cmp1"; char s2_cmp[10]="cmp2"; printf("%d\n",my_strcmp(s1_cmp,s2_cmp)); //my_strchr char s_chr[10]="strchr"; char *p_chr=my_strchr(s_chr,‘t‘); if(NULL!=p_chr) printf("%s\n",p_chr); else printf("don‘t have this character.\n"); //my_strdup char s_d[10]="strdup"; char *s_dup=my_strdup(s_d); printf("%s\n",s_dup); free(s_dup); //my_strstr char s_str[20]="abcdrgrkj"; char t_str[10]="bcd"; printf("%s\n",my_strstr(s_str,t_str)); //my_memset char s_mem[10]="hello"; char *p_mem=my_memset(s_mem,‘*‘,strlen(s_mem)); char s_mem1[10]="hello"; char *p_mem1=my_memset(s_mem1,‘*‘,sizeof(s_mem1)); printf("%s\n",p_mem); printf("%s\n",p_mem1); //my_memcpy char s_memcpy[10]="abcd"; char *p=my_memcpy(s_memcpy,s_memcpy+2,2);//未发生内存重叠 printf("%s\n",p); char s1_memcpy[10]="abcd"; char *p1=my_memcpy(s1_memcpy+2,s1_memcpy,3);//未处理内存重叠,输出aba printf("%s\n",p1); //my_memmove char s_move[10]="abcd"; char *p_m=my_memmove(s_move+2,s_move,3);//正确处理内存重叠,输出abc printf("%s\n",p_m); return 0;}
C语言常见字符串函数实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。