常用库函数的实现:
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;
}