5.strncpy(arr1,arr2,4)把arr2前四个元素拷贝到arr1,长度不够拷贝个数,在拷贝元素后面加0,直到够拷贝个数为止
char* my_strncpy(char* dest, const char* src, int num) //{ // char* ret = dest; // while (num&&(*dest++=*src++)) // { // num--; // } // while (num) // { // *dest = '\0'; // num--; // } // return ret; // } //int main() //{ // char arr1[] = "abcdefg"; // char arr2[] = "hello zyx"; // char*ret=my_strncpy(arr1, arr2, 6); // printf("%s", ret); //}
6.char* my_strncat(char* dest,const char* src, int num)把源头的n个字符追加到dest字符串中,当追加个数大于源头元素个数时追加‘\0’
char* my_strncat(char* dest,const char* src, int num) //{ // char* ret = dest; // while (*dest) // { // dest++; // } // while (num && (*dest++ = *src++)) // { // num--; // if (num==0) // { // return ret; // } // } // return ret; //} //int main() //{ // char arr1[40] = "abcdef"; // char arr2[] = "hello world"; // printf("%s",my_strncat(arr1, arr2, 18)); // return 0; //}
这是模拟实现,首先等目的字符串到了结束标志,再给后面追加源头字符串追加n个
7.int strncmp(const char*str1,const str2,unsigned int num);字符串比较,比较num对返回结果。
8.strstr 找子字符串,const char * strstr ( const char * str1, const char * str2 );
取字符串1里面查找字符串2,假如有返回字符串中字符串2的首地址,否则返回空指针
char* my_strstr(const char* str1, const char* str2) { const char* p1 = str1; if (*str2 =='\0') { return (char*)str1; } while (*p1) { const char* s1 = p1; const char* s2 = str2; while ((*s1 == *s2)&&(*s2)&&*(s1)) { s1++; s2++; } if (*s2 == '\0') { return (char*)p1; } p1++; } return NULL; } int main() { const char* p1 = "abcdefbcdef"; const char* p2 = "bcd"; char *ret= my_strstr(p1, p2); if (ret == NULL) printf("不是子串\n"); else printf("%s", ret); return 0; }
这个函数实现先把目的地字符串存起来,然后再用const修饰两个字符串,存p1,源头字符串,好处就是改变p1不好会改变源头字符串,返回的都是当时的值,让电脑一直几下现在比较的位置。