学习、研究库函数的实现,能使你考虑问题更加严谨、全面,培养良好的编程风格和习惯
最近想学习一下C语言库函数的内部实现,于是自己简单地写了几个
贴出以下代码,希望大家能够帮忙指正、优化、完善,
特别是考虑不周和执行效率上给出指导意见
阅读本文前,可以先参考本博客的上一篇文章 C语言函数小集合
调试环境: VS2008(C)
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
-
-
- #include "stdafx.h"
- #include <ctype.h>
-
-
-
- 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++)
- {
- if(m_isalnum(str[i]))
- printf("%c is a number or character./n", str[i]);
- }
- }
-
-
-
- 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]))
- printf("%c is a character./n", str[i]);
- }
- }
-
-
-
- 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]))
- printf("%c is a lower character./n", str[i]);
- }
- }
-
-
-
- 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]))
- printf("%c is a isupper character./n", str[i]);
- }
- }
-
-
-
- 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]))
- printf("%c is a isxdigit character./n", str[i]);
- }
- }
-
-
-
- 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))
- {
- if(ch<='Z'&&ch>='A')
- ch=m_tolower(ch);
- printf("%c is a tolower character./n", ch);
- }
- }
- }
-
-
-
- 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))
- {
- if(ch<='z'&&ch>='a')
- ch=m_toupper(ch);
- printf("%c is a toupper character./n", ch);
- }
- }
- }
-
-
-
- int m_atoi(char *str)
- {
- char *s=str;
- int sum=0, flag=1;
- if(*s==NULL)
- return 0;
- while(*s==' ')
- 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));
- }
-
-
-
- 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)
- printf("-");
- for(j=i-1; j>=0; j--)
- {
- 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");
- }
-
-
-
- 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=='.')
- {
- 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));
- }
-
-
-
- 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;
- dot=n-val;
- 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;
- } 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");
- }
-
-
-
- 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;
- }
运行结果:
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。