常用库函数的实现:
1. strcmp() 实现
不使用库函数,编写int strcmp(char *source, char * dest)若相等返回0,不等返回-1.
int Mystrcmp_simple(char * src, char*dest)
{
assert(src!=NULL && dest!=NULL);
while(*(src++) == *(dest++))
{
if((*src == '\0') && (*dest == '\0'))
return 0;
}
return -1;
}
编写intstrcmp(char *source, char * dest),若相等返回0,大于返回1,小于返回-1.
int Mystrcmp(const char *src, const char* dest) { assert((dest!=NULL)&&(src!=NULL)); while((*src == *dest)&&*src!='\0'&&*dest!='\0')) { src++; dest++; } if(*src == *dest ) return 0; else if(*src>*dest) return 1; else return -1; }
2. 字符串拷贝函数int strcpy(char *dest, char*src),成功返回copy的字节数,失败返回-1.
int Mystrcpy(char*src, char *dest) { assert(src!=NULL && dest!=NULL); int len = strlen(src); int i =0; while((*(dest++) = *(src++)) != '\0') { i++; } if(i == len) return i; else return -1; }
strncpy函数int Mystrncpy(char *src, char *dest, int n) { assert(src!=NULL && dest!=NULL); int lenS = strlen(src); //int lenD = strlen(dest); if(lenS<n) { perror("parameter error"); return -1; } int i =0; while((*(dest++) = *(src++))!='\0') { i++; if(i == n) { *dest = '\0'; // 此处一定是要有的 return i; } } return -1; }
3. 字符串转换为int型数据,或者int型数据转换为字符串
/*atoi转换函数*/ #include<stdio.h> #include<stdlib.h> #include<limits.h> // 定义了INT_MIN 和 INT_MAX两个宏 int Myatoi(const char *src) { assert(src != NULL); const char *temp = src; int num = 0; if(*temp == '-')// 确定字符串的首位是否是‘-’ { temp++; while('\0' != *temp) { num = num*10 - (*temp - '0'); temp++; if(num> 0) // 判断数据是否溢出 { printf("date overflow."); return -1; } } return num; } else{ while('\0' != *temp) { num = num*10 + (*temp - '0'); temp++; if(num < 0) // 判断数据是否溢出 { printf("data overflow."); return -1; } } return num; } }
itoa函数
#define MAXSIZE 11 // int的最大取值为4294967296,因此定义MAXSIZE 为11 char* Myitoa(intsrc, char *dest, int radix)// radix是将int数据转换为radix进制的字符串 { assert(NULL != dest); int i=0,j=0; intsign = src; chartemp[MAXSIZE]; if(src < 0) { src = -src; } while(src) { temp[i] = src%radix + '0'; i++; src = src/radix; } if(sign< 0) {temp[i] = '-'; i++; temp[i] = '\0'; } temp[i] = '\0'; cout<<temp<<endl; i--; while(i>=0) { dest[j++] = temp[i--]; } dest[j] = '\0'; return dest; }
4.判断字符串是否是回文使用指针实现
/*判断一个字符串是否是回文*/ bool isPalidrome(char *input) { assert(NULL != input); char *begin = input; char *end = begin + strlen(input) -1; while(end>begin) { if(*(begin++)!=*(end--)) return false; } return true; }