c语言常见函数自编写
2015-06-28 11:40
507 查看
//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; }
相关文章推荐
- 有一篇文章,共有3行文字,每行有10个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格及其它字符的个数
- C/C++ sort函数的用法
- 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
- 将一个数组中的值按逆序重新存放。
- 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
- Eclipse+CDT+MinGw进行C&C++开发
- 文章标题
- C++ MPICH
- C++学习备忘录=>持续更新
- C++继承、虚继承、虚函数类的大小问题
- YTU 2387计算时间差【C++】
- C语言中#include用法
- c++的三种指针
- c++容器使用总结(转载)
- double类型引发的问题
- C语言堆和堆栈
- C++创建对象的两种方法
- 大话设计模式C++版——观察者模式
- 大话设计模式C++版——观察者模式
- C++类对象成员变量与成员函数内存分配问题