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

C语言部分函数原型实现

2010-06-24 15:12 267 查看
学习、研究库函数的实现,能使你考虑问题更加严谨、全面,培养良好的编程风格和习惯

最近想学习一下C语言库函数的内部实现,于是自己简单地写了几个

贴出以下代码,希望大家能够帮忙指正、优化、完善,

特别是考虑不周和执行效率上给出指导意见

阅读本文前,可以先参考本博客的上一篇文章 C语言函数小集合

调试环境:
VS2008(C)

// sysFunc.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <ctype.h>
/**************************************/
/**********     isalnum()     *********/
/**************************************/
int m_isalnum(char ch)
{
return ((ch<='9'&&ch>='0')
||(ch<='z'&&ch>='a')
||(ch<='Z'&&ch>='A'));
}
void fun_isalnum()
{
char str[]="A12a;D*s06";
int i;
printf("Test isalnum.: %s/n", str);
for(i=0; str[i]!=NULL; i++) /* #define NULL 0 */
{
if(m_isalnum(str[i])) /* isalnum(str[i]) */
printf("%c is a number or character./n", str[i]);
}
}
/**************************************/
/**********     isalpha()     *********/
/**************************************/
int m_isalpha(char ch)
{
return ((ch<='z'&&ch>='a')
||(ch<='Z'&&ch>='A'));
}
void fun_isalpha()
{
char str[]="A12a;D*s06";
int i;
printf("/nTest isalpha: %s/n", str);
for(i=0; str[i]!='/0'; i++)
{
if(m_isalpha(str[i])) /* isalpha(str[i]) */
printf("%c is a character./n", str[i]);
}
}
/**************************************/
/**********     islower()     *********/
/**************************************/
int m_islower(char ch)
{
return (ch<='z'&&ch>='a');
}
void fun_islower()
{
char str[]="A12a;D*s06";
int i;
printf("/nTest islower: %s/n", str);
for(i=0; str[i]!='/0'; i++)
{
if(m_islower(str[i])) /* isalpha(str[i]) */
printf("%c is a lower character./n", str[i]);
}
}
/**************************************/
/**********     isupper()     *********/
/**************************************/
int m_isupper(char ch)
{
return (ch<='Z'&&ch>='A');
}
void fun_isupper()
{
char str[]="A12a;D*s06";
int i;
printf("/nTest isupper: %s/n", str);
for(i=0; str[i]!='/0'; i++)
{
if(m_isupper(str[i])) /* isalpha(str[i]) */
printf("%c is a isupper character./n", str[i]);
}
}
/**************************************/
/**********     isxdigit()    *********/
/**************************************/
int m_isxdigit(char ch)
{
return (ch<='9'&&ch>='0');
}
void fun_isxdigit()
{
char str[]="A12a;D*s06";
int i;
printf("/nTest isxdigit: %s/n", str);
for(i=0; str[i]!='/0'; i++)
{
if(m_isxdigit(str[i])) /* isalpha(str[i]) */
printf("%c is a isxdigit character./n", str[i]);
}
}
/**************************************/
/**********     tolower()     *********/
/**************************************/
char m_tolower(char ch)
{
if(ch<='Z'&&ch>='A')
return (ch+'a'-'A');
return '0';
}
void fun_tolower()
{
char str[]="A12a;D*s06";
int i;
char ch;
printf("/nTest tolower: %s/n", str);
for(i=0; str[i]!='/0'; i++)
{
ch=str[i];
if(m_isalpha(ch)) /* isalpha(str[i]) */
{
if(ch<='Z'&&ch>='A')
ch=m_tolower(ch);
printf("%c is a tolower character./n", ch);
}
}
}
/**************************************/
/**********     toupper()     *********/
/**************************************/
char m_toupper(char ch)
{
if(ch<='z'&&ch>='a')
return (ch+'A'-'a');
return '0';
}
void fun_toupper()
{
char str[]="A12a;D*s06";
int i;
char ch;
printf("/nTest toupper: %s/n", str);
for(i=0; str[i]!='/0'; i++)
{
ch=str[i];
if(m_isalpha(ch)) /* isalpha(str[i]) */
{
if(ch<='z'&&ch>='a')
ch=m_toupper(ch);
printf("%c is a toupper character./n", ch);
}
}
}
/**************************************/
/**********       atoi()      *********/
/**************************************/
int m_atoi(char *str)
{
char *s=str;
int sum=0, flag=1;
if(*s==NULL)
return 0;
while(*s==' ') /* skip space */
s++;
if(*s=='-')
{
flag=-1;
s++;
}
while(*s!='/0' && m_isxdigit(*s))
{
sum=*s-'0'+sum*10;
s++;
}

return flag*sum;
}
void fun_atoi()
{
char str[]="   -123.456def";
printf("/nTest atoi.../n");
printf("%s char to int: %d/n", str, m_atoi(str));
}
/**************************************/
/**********       itoa()      *********/
/**************************************/
void m_itoa(int n)
{
char *s=NULL;
int i, j, mod, flag=0;
char num[20];
if(n<0)
{
flag=1;
n=-n;
}
i=0;
do
{
mod=n%10;
n=n/10;
num[i++]=mod+'0';
} while (n>0);

if(flag) /* print '-' */
printf("-");
for(j=i-1; j>=0; j--) /* print reverse char */
{
printf("%c", num[j]);
}
}
void fun_itoa()
{
int n=1234;
printf("/nTest itoa.../n");
printf("%d char to int: ", n);
m_itoa(n);
printf("/n");
}
/**************************************/
/**********       atof()      *********/
/**************************************/
float m_atof(char *str)
{
char *s=str;
if(*s=='/0')
return 0.0;

float sum=0.0;
int flag=1, pow=0;
if(*s=='-')
{
flag=-1;
s++;
}
while(*s!='/0')
{
if(*s=='.') /* dot */
{
pow=1;
s++;
continue;
}
sum=*s-'0'+sum*10;
pow*=10;
s++;
}
return flag*sum/pow;
}
void fun_atof()
{
char str[]="-123.345";
printf("/nTest atof.../n");
printf("%s char to int: %f/n", str, m_atof(str));
}
/**************************************/
/**********       ftoa()      *********/
/**************************************/
void m_ftoa(float n)
{
char num[20];
int i, j, val, mod, flag, pow;
float dot;
if(n<-1e-6)
{
flag=1;
n=-n;
}
i=0;
val=(int)n; /* integer */
dot=n-val;  /* decimal */
do
{
mod=val%10;
val=val/10;
num[i++]=mod+'0';
}while(val>0);
if(dot>1e-6)
{
num[i]='.';
pow=10;
}
do
{
dot=dot*pow;
mod=(int)dot;
num[i++]=mod+'0';
dot=dot-mod; /* error, why, float... help me */
} while (dot>1e-6);
if(flag)
printf("-");
for(j=i-1; j>=0; j--)
printf("%c", num[j]);
}
void fun_ftoa()
{
float n=-1234.5678;
printf("/nTest ftoa.../n");
printf("%d char to int: ", n);
m_ftoa(n);
printf("/n");
}
/**************************************/
/**********       main()      *********/
/**************************************/
int _tmain(int argc, _TCHAR* argv[])
{
fun_isalnum();
fun_isalpha();
fun_islower();
fun_isupper();
fun_isxdigit();
fun_tolower();
fun_toupper();
fun_atof();
fun_atoi();
fun_itoa();
fun_ftoa();
return 0;
}


运行结果:

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