size_t strlen(const char *str);
int strlenFunction(const char* str) { int count = 0; if (str == NULL) { return 0; } while (*str != '\0') { count++; str++; } return count; }
计算字符串开始到 ‘ \0 ’ 之前的字符个数;所以它比sizeof( ) 函数少一个字节的原因;
int strcmp(const char *str1, const char *str2);
int strcmpFunction(const char *str1, const char *str2) { int result = 0; if ((str1 == NULL) || (str2 == NULL)) { cout << "null" << endl; return -2; } while (!(result = *str1 - *str2) && (*str1 != '\0')) { str1++; str2++; } if (result < 0) { result = -1; } else if (result > 0) { result = 1; } else { result = 0; } return result; }
记住它是大小写不敏感函数,它是比较 的str1 和 str2 字符串中的单个相应位置的大小;
int strcmp(const char *str1, const char *str2, size_t n);
int strncmpFunction(const char *str1, const char *str2, int size_n) { int result = 0; if (!size_n) { return -2; } while (size_n-- && (*str1 != '\0') && (*str1 == *str2)) { //size_n--; str1++; str2++; } result = *str1 - *str2; if (result < 0) { result = -1; } else if (result > 0) { result = 1; } else { result = 0; } return result; }
记住它是大小写不敏感函数,它是比较 的str1 和 str2 字符串中的单个相应位置的大小;它比较的是 0~(size_n - 1)个;
但是不要写为--size_n 这样就少了一次;
char *strcpy(char *dest, const char *src);
char * strcpyFunction(char *dest, const char *str2) { if ((NULL == str1) || (NULL == str2)) { return NULL; } if (dest== str2) { return dest; } char *dests = dest; while (*str2 != '\0') { *dests++ = *str2++; } return dest; }
就是字面意思复制 copy
char *strncpy(char *dest, const char *src, size_t n);
char * strncpyFunction(char *dest, const char *str2 , int size_n) { if ((NULL == dest) || (NULL == str2)) { return NULL; } if (dest== str2) { return dest; } char *dests = dest; while ((*str2 != '\0')&&(size_n--)) { *dests++ = *str2++; } return dest; }
strcpy 的衍生,copy str2 字符串前size_n 个字符串到 dest中 //0~(size_n - 1)个
char *strcat(char *dest, const char *src);
char * strcatFunction(char *dest, const char *str2) { if ((NULL == dest) && (NULL == str2)) { return NULL; } char *dests = dest; for (dests; *dests != '\0'; dests++); while (*str2 != '\0') { *dests++ = *str2++; } *dests++ = '\0'; return dest; }
dest + str2 //真清楚
char * strrev(char *str);
char * strrevFunction(char *str) { if (NULL == str) { return NULL; } char *s_right = str; char *s_left = str; char _str; for (s_right; *s_right != '\0'; s_right++) { ; } --s_right;//del'\0' while (s_left < s_right) { _str = *s_left; *s_left++ = *s_right; *s_right-- = _str; } //while (s_left = s_right); return str; }
字符串的旋转,举个例子:
char *str = "you cool "; 用过函数后变为下面的一坨不明物体
char *str = "looc uoy";
有啥用?暂时还不知到!!
char * strlwr(char * strlwr);
char * strlwrFunction(char * strlwr) { if (NULL == strlwr) { return NULL; } char *str; str = strlwr; while (*str != '\0') { if (*str >= 'A' && *str <= 'Z') { *str += ('a' - 'A'); } str++;//地址下移 } return strlwr; }
字符串全转为小写
char* strupr(char * strupr);
char* struprFunction(char * strupr) { if (NULL == strupr) { return NULL; } char *str; str = strupr; while (*str != '\0') { if (*str >= 'a' && *str <= 'z') { *str += ('A' - 'a'); } str++; } return strupr; }
字符串全转为大写
对应的可以写出 单个字符转换;
int tolower(int tolower);
int toupper(int toupper);
//重置tolower,字母小写转换 int tolowerFunction(int tolower) { if ((tolower >= 'A') && (tolower <= 'Z')) { return tolower + ('a' - 'A');//差值-\+32 } else { return tolower; } } //重置toupper,字母大写转换 int toupperFunction(int toupper) { if ((toupper >= 'a') && (toupper <= 'z')) { return toupper + ('A' - 'a'); } else { return toupper; } }
利用上面单个字符大小写转换函数,可以完成敏感函数的重构;
int strnicmp(const char *str1, const char *str2, int size_n);
int stricmp(const char *str1, const char *str2);
//重置strnicmp, int strnicmpFunction(const char *str1, const char *str2, int size_n) { int result = 0; if (!size_n) { return -2; } while (--size_n && (*str1 != '\0') && (tolowerFunction(*str1) == tolowerFunction(*str2))) { //size_n--; str1++; str2++; } result = tolowerFunction(*str1) - tolowerFunction(*str2); if (result < 0) { result = -1; } else if (result > 0) { result = 1; } else { result = 0; } return result; } //重置stricmp int stricmpFunction(const char *str1, const char *str2) { int result = 0; if ((str1 == NULL) || (str2 == NULL)) { cout << "null" << endl; return -2; } while (!(result = toupperFunction(*str1) - toupperFunction(*str2)) && (*str1 != '\0')) { str1++; str2++; } if (result < 0) { result = -1; } else if (result > 0) { result = 1; } else { result = 0; } return result; }
int atoiFunction(const char *str);
int atoiFunction(const char *str) { if (NULL == str) { return 0; } int number = 0, flag = 0; while (*str == ' ') { str++; } if (*str == '-') { flag = -1; ++str; } else { flag = 1; } while (*str >= '0'&&*str <= '9') { number = number * 10 + *str - '0'; str++; } return number * flag; }
将字符串转为整形,atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回(返回转换后的整型数)。