典型c库函数的实现

StrToInt:字符串转int输出

 1 enum Status 
 2 {
 3 kValid = 0,
 4 kInvalid = 1,
 5 };
 6 
 7 int StrToInt(const char* str)
 8 {
 9     g_nStatus = kInvalid;
10     long long num = 0;
11 
12     if(str!=NULL && *str != '\0')
13     {
14         bool minus = false;
15         while(*str =="")
16             str++;
17         if(*str =='+')
18         {
19             str++;
20         }
21         else if(*str=='-')
22         {
23             str++;
24             minus = true;
25         }
26 
27         if(*str !='\0')
28         {
29             num = StrToIntCore(str, minus);
30        }
31     }
32     return (int)num;
33 }
34 
35 int StrToIntCore(const char *digit, bool minus)
36 {
37     long long num = 0;
38     while(*digit !='0')
39     {
40         if(*digit >='0' && *digit<='9')
41         {
42             int flag = minus ? -1:1;
43             num =num*10 + flag*(*digit -'0');
44 
45             //判断整数是否发生上溢/下溢
46             if((!minus && num > 0x7FFFFFFF) //最大正数:2^32-1
47                 || (minus && num <(signed int)0x80000000))//最小负数:2^32
48             {
49                 num = 0;
50                 break;
51             }
52             digit++;
53         }
54         else
55         {
56             num = 0;
57             break;
58         }
59     }
60     if(*digit=='\0')
61     {
62         g_nStatus = kValid;
63     }
64 
65     return num;
66 }

 char* strcpy(char* srcDest, const char* srcSrc)

 1 char *strcpy(char* strDest, const char *srcSrc)
 2 {
 3     assert((strDest!=NULL)&&(strSrc!=NULL));  //2分
 4     char *address = strDest;    //2分
 5     while(*srcSrc!='\0')      //2分
 6     {
 7         *strDest = *srcSrc;
 8         strDest++;
 9         strSrc++;
10     }   
11     return address;  //2分
12 }
 返回char* 的原因:实现链式表达式
1、就是方便一些,否则就要这样写:
 char strDest[12];
 strcpy( strDest, “hello world”);
 int length = strlen(strDest);
什么链式就是一连串写下来的意思。。。
2、strcpy()的参数本来就是指针类型,字符串的首地址。          

 

posted on 2014-08-15 16:19  阳台  阅读(217)  评论(0编辑  收藏  举报

导航