str的各种函数原型strcat、strcpy等

来源:互联网 发布:税务总局网络培训学院 编辑:程序博客网 时间:2024/06/05 13:31

strcat与strncat原型

////////////////////////////////////////////////////////////////////////////功能为连接两个字符串,把src连接到dest后面;返回dest地址;//////////////////////////////////////////////////////////////////////////char* mystrcat(char* dest,const char* src){assert((dest != NULL) && (src != NULL));char* res = dest;while(*dest) // *dest != '\0' {dest++;}while(*dest++ = *src++){NULL;}return res;}
/*//功能为连接两个字符串,把src连接到dest后面;返回dest地址;*/char* mystrncat(char* dest,const char* src,unsigned int num){assert((dest != NULL) && (src != NULL));if (!num){return dest;}char* res = dest;while(*dest) // *dest != '\0' {dest++;}while(*dest++ = *src++){if (--num == 0){*dest = '\0';break;}}return res;}

strchr与strrchr原型

////////////////////////////////////////////////////////////////////////////功能为查找str中首次出现c的位置,如有有,则返回出现位置,否则返回NULL;///////////////////////////////////////////////////////////////////////////*const char * strchr ( const char * str, int character );char * strchr (       char * str, int character )*/char* mystrchr(char* str,char c){assert(str != NULL);while(*str && *str != c){str++;}if (*str == c)return str;return NULL;}

////////////////////////////////////////////////////////////////////////////功能为查找str中最后一次出现c的位置,如有有,则返回出现位置,否则返回NULL;//////////////////////////////////////////////////////////////////////////char* mystrrchr(char* str,char c){assert(str != NULL);char* res = str;while(*res++);while((--res != str) && (*res != c));if (*res == c)return res;return NULL;}

strcmp与strncmp原型

////////////////////////////////////////////////////////////////////////////功能为比较两个字符串;//当str1指向的字符串大于str2指向的字符串时,返回正数。//当str1指向的字符串等于str2指向的字符串时,返回0。//当str1指向的字符串小于str2指向的字符串时,返回负数。;//////////////////////////////////////////////////////////////////////////int mystrcmp(const char* str1,const char* str2){assert((str1 != NULL) && (str2 != NULL));while (*str1 && (*str1 == *str2)){str1++;str2++;}return *str1-*str2;}

////////////////////////////////////////////////////////////////////////////功能为比较两个字符串前num个字符;//当str1指向的字符串大于str2指向的字符串时,返回正数。//当str1指向的字符串等于str2指向的字符串时,返回0。//当str1指向的字符串小于str2指向的字符串时,返回负数。;//////////////////////////////////////////////////////////////////////////int mystrncmp(const char* str1,const char* str2,unsigned int num){assert((str1 != NULL) && (str2 != NULL));if (!num)return 0;while (--num && *str1 && (*str1 == *str2)){str1++;str2++;}return *str1-*str2;}

strcpy与strncpy原型

/*功能为拷贝字符串内容到目的串,把src所指向的内容拷贝到dest;*/char* mystrcpy(char* dest,const char* src){assert((dest != NULL) && (src != NULL));char* res = dest;while(*dest++ = *src++){NULL;}return res;}

/*功能为拷贝字符串内容到目的串,把src所指向的内容的前num个字符拷贝到dest;标准库中返回指针不是以null即'\0'结束的,必须手动添加*/char* mystrncpy(char* dest,const char* src,unsigned int num){assert((dest != NULL) && (src != NULL));if (!num){*dest = '\0';return dest;}char* res = dest;while(*dest++ = *src++){if (--num == 0){*dest = '\0';break;}}return res;}

strspn与strcspn原型

////////////////////////////////////////////////////////////////////////////功能:在字符串str1中搜寻str2中所出现的字符//说明:返回第一个出现的字符在s1中的下标值//亦即在s1中出现而s2中没有出现的子串的长度;//////////////////////////////////////////////////////////////////////////unsigned int mystrcspn ( const char * str1, const char * str2 ){assert((str1 != NULL) && (str2 != NULL));// map有32个字节的大小,也就是256个bit,可把map堪称一个2维数组[32][8]unsigned char map[32] = {0};// 每个ASCII码(设为c)有8bit,把它分成2部分,低3位构成下标j(通过c&7(2进制为111));// 高5位构成下标i(通过c>>3得到)。这样在map[i][j]中置1表示字符存在;while(*str2){map[*str2 >> 3] |= (unsigned int)(1 << (*str2 & 7));str2++;}map[0] |= 1;unsigned int count = 0;while(!(map[*str1 >> 3] & (unsigned int)(1 << (*str1 & 7)))){count++;str1++;}return count;}
//返回字符串中第一个不在指定字符串中出现的字符下标//亦即第一个在s1中出现且s2中存在的子串的长度;unsigned int mystrspn(char* str1,char* str2){assert((str1 != NULL) && (str2 != NULL));// map有32个字节的大小,也就是256个bit,可把map堪称一个2维数组[32][8]unsigned char map[32] = {0};// 每个ASCII码(设为c)有8bit,把它分成2部分,低3位构成下标j(通过c&7(2进制为111));// 高5位构成下标i(通过c>>3得到)。这样在map[i][j]中置1表示字符存在;while(*str2){map[*str2 >> 3] |= (unsigned int)(1 << (*str2 & 7));str2++;}map[0] |= 0;unsigned int count = 0;while((map[*str1 >> 3] & (unsigned int)(1 << (*str1 & 7)))){count++;str1++;}return count;}

strlen原型

////////////////////////////////////////////////////////////////////////////功能为返回字符串str的长度(不包括'\0');//size_t strlen ( const char * str );//////////////////////////////////////////////////////////////////////////unsigned int mystrlen(const char* str){assert(str != NULL);unsigned int len = 0;while(*str++){len++;}return len;}

strstr原型

//需找str字符串中出现strSearch字符串位置的指针。如果没找到,则返回NULL,如果strSearch为空,则返回str;char* mystrstr(char* str,char* strSearch){/*int length1=strlen(str);  int length2=strlen(strSearch);  while(length1>=length2)  {  length1--;  if(!mystrncmp(str,strSearch,length2))//比较前n个字符串;return str;  str++;  }  return NULL; */char* b = strSearch;if( *b == NULL ){return str;}char* a = NULL;for( ; *str != NULL; str++) {if( *str != *b ) {continue;}a = str;while(1) {if( *b == NULL ) {return str;}if( *a++ != *b++ ) {break;}}b = strSearch;}return NULL;}

strpbrk

//在源字符串(str1)中找出最先含有搜索字符串(str2 )中的任一字符的位置并返回,若找不到则返回空指针;//与mystrnspn的算法一样,只是前者返回相同字符的指针位置,后者返回相同字符的个数;char* mystrpbrk(char* str1,char* str2){assert((str1 != NULL) && (str2 != NULL));// map有32个字节的大小,也就是256个bit,可把map堪称一个2维数组[32][8]unsigned char map[32] = {0};// 每个ASCII码(设为c)有8bit,把它分成2部分,低3位构成下标j(通过c&7(2进制为111));// 高5位构成下标i(通过c>>3得到)。这样在map[i][j]中置1表示字符存在;while(*str2){map[*str2 >> 3] |= (unsigned int)(1 << (*str2 & 7));str2++;}map[0] |= 1;while(*str1){// 如果有相同的字符则返回;if( map[*str1 >> 3] & (1 << (*str1 & 7)) )return str1++;str1++;}return NULL;}



经过一天的奋斗,终于将这些理清楚了。再接再厉!
这些经常出现在面试题中,不能再输在这上面了













0 0
原创粉丝点击