c语言常见函数自编写

来源:互联网 发布:c语言web攻击脚本 编辑:程序博客网 时间:2024/06/07 01:36
//1.子字符串查找,如果找到返回第一个字符下标,找不到返回-1 复杂度O(m*n)int strfind(const char * str,const char* substr){if(str==NULL||substr==NULL){return -1;}int len1=strlen(str);int len2=strlen(substr);if(len1<len2)return -1;int c=len1-len2;int i,j;for(i=0;i<=c;i++){for( j=0;j<len2;j++){if(str[i+j]!=substr[j])break;}if(j==len2)return i+1;}return -1;}//2.在字符转中找到第一个只出现一次的字符char FirstCharNotRepeated(const char *str){int table[256];if(!str){return '\0';}for(int i=0;i<256;i++){table[i]=0;}int len=strlen(str);for(int i=0;i<len;i++){table[str[i]]++;}for(int i=0;i<len;i++){if(table[str[i]]==1)return str[i];}return '\0';}//3.字符串拷贝char *strcpy(char *dest,const char* src){if(dest==src){return dest;}assert(dest!=NULL&&src!=NULL);char* p=dest;while(*src!='\0'){*dest++=*src++;}*dest='\0';return p;}//4.查找字符串首次出现的字符位置char * strchr( char *str,char c){assert(str!=NULL);while(*str++!='\0'){if(c==*str)return str;}return NULL;}//5.字符串比较int strcmp(const char *s1,const char *s2){assert(s1!=NULL&&s2!=NULL);while(*s1&&*s2&&*s1==*s2){s1++;s2++;}return (*s1-*s2);}//6.n个字符拷贝char *strncpy(char *dest,const char * src,unsigned int n){assert(dest!=NULL&&src!=NULL);char  *p=dest;while(n--&&*src!='\0'){*dest++=*src++;}*dest='\0';return p;}//7.字符串拼接char *strcat(char *dest,const char *src){assert(dest!=NULL&&src!=NULL);char *p=dest;while(*dest++!='\0');while(*src!='\0')*dest++=*src++;*dest='\0';return p;}//8.求字符串长度int strlen1(const char *str){assert(str!=NULL);int len=0;while(*str++!='\0')len++;return len;}//9.将字符串拷贝到新的位置char *dup(char *src){if(src!=NULL){int len=0;char *temp=src;while(*src++!='\0')len++;char *start=(char*)malloc(sizeof(char)*(len+1));assert(start!=NULL);while(*temp!='\0')*start++=*temp++;*start='\0';return (start-len);}return NULL;}//10.从src中取n个字符拼接到dest后面char *strncat(char *dest,const char *src,unsigned int n){assert(dest!=NULL&&src!=NULL);char *p=dest;while(*dest++!='\0');while(n--&&*src!='\0')*dest++=*src++;*dest='\0';return p;}//11.字符翻转char *strrev(char *str){assert(str!=NULL);char *s=str,*s2=str,temp;while(*s!='\0')s++;--s;while(s2<=s){cout<<*s<<*s2<<endl;temp=*s;*s=*s2;*s2=temp; s2++;s--;}return str;}//12.将src数组的count个字节搬到destiny数组void *memcpy(void *dest, const void *src, unsigned int count) {assert(dest!=NULL&&src!=NULL);void *p=dest;while(count--&&*(char*)src!='\0'){*(char*)dest=*(char*)src;dest=(char*)dest+1;src=(char*)src+1;}return p;}//13.将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值void *memset(void *s, int ch, unsigned n){assert(s!=NULL);void *p=s;while(n--){*(char*)p=(char)ch;p=(char*)p+1;}return s;}

0 0
原创粉丝点击