常用庫函數的實現:
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;
}