您的位置:首页 > 编程语言 > C语言/C++

C++ 实现strlen,strcpy,strcat等函数

2013-05-13 14:01 337 查看
通过实现这些函数,让我明白写一个简单的函数其实也要考虑一些问题的,最基本的函数参数的合法性,使用全局变量,全局函数等的合法性。而且写代码时要细心,在for循环语句中,循环次数很容易搞错,导致数组操作越界或指针访问越界。

 

strlen的实现:

size_t myStrlen(const char *str)
{
assert(str !=NULL);
size_t len=0;
while((*str++) !='\0')
{
++len;
}
return len;
}


strcpy的实现:

char *myStrcpy(char *strDest, const char *strSrc)
{
assert((strDest !=NULL) && (strSrc !=NULL));
char* p=strDest;
while((*strDest++ = *strSrc++) !='\0');
return p;
}

strncpy的实现:

char* strncpy(char* strDest,const char* strSource,size_t count)
{
assert((strDest !=NULL)&&(strSource !=NULL));
char* p=strDest;
while(count &&(*strDest++=*strSource++))  /* copy string */
--count;
if(count !=0)  /* pad out with zeroes */
while(--count)
*strDest++='\0';
return p;
}


strcmy的实现:

int myStrcmp(const char *str1, const char *str2)
{
assert((str1 != NULL) && (str2 != NULL));
//循环找到第一个不相等的字符
for (; *str1 == *str2; ++str1,++str2)
{
if (*str1 == '\0')
{
return 0;
}
}
return *(unsigned char*)str1 - *(unsigned char*)str2 >0 ? 1:-1;
}


strcat的实现:

char* myStrcat(char *str1, const char *str2)
{
assert((str1 !=NULL) && (str1 !=NULL));
char* p=str1;
while((*str1++) !='\0');
--str1;
for(; *str2 !='\0'; ++str1,++str2)
{
*str1=*str2;
}
*str1='\0';
return p;
}


 

 

atoi的实现:

int atoiTest(const char* s)
{
assert(s !=NULL);
int i = 0,sum = 0,sign;
//输入的数前面可能还有空格或制表符应加判断
while(' '==s[i] || '/t'==s[i])
{
++i;
}
sign = ('-'==s[i])? -1:1;
if('-'==s[i] || '+'==s[i])
{
++i;
}
while(s[i] >= '0' && s[i] <= '9')
{
sum = s[i]-'0' +sum*10;
++i;
}
return sign*sum;
}


 

 itoa的实现:

char* itoaTest(int num,char* buf,int radix)
{
assert(buf !=NULL);
int sign,digval;
char* p=buf;
sign=(radix==10 && num<0);
if (sign)
{
*p++='-';
num =-num;
}
do
{
digval=num % radix;
num /= radix;
if(digval >9)
{
*p++ =digval -10 + 'a';
}
else
{
*p++ =digval + '0';
}
}while(num >0);
*p-- = '\0';

char* q=buf;
if(sign)
{
++q;
}

char temp;
while(q<p)
{
temp=*q;
*q=*p;
*p=temp;
++q;
--p;
}
return buf;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐