c 常用函数总结

觉得还是有必要把一些常用函数总结一下。方便自己复习,也可以方便自己改进。

如果有人不幸看到此文,真的恳请您能看一下以下函数,能指点一点是一点,十分感谢!


//原地反转字符串。虽然这里是原地反转,但是还是实现成带返回值的,这样返回值可以直接
//作为别的函数参数,即构成链式的。这种实现方式要记得!你老忘。。。
char *Reverse(char *src_str)
{
        assert(src_str != NULL);
//这里再次提醒,如果参数str为const(假如),那这里des必须声明为const。
//编译器不报错,至少我这没有,但是毕竟不严谨
        char *pStart = src_str;
        char *pEnd =src_str;


        while (*pEnd++ != '\0')
                ;
        pEnd -= 2;
        while (pStart < pEnd){
                exchange(*pStart, *pEnd);   //此处因为用的宏写的exchange,所以传的参数为指针值,而不是指针
                ++pStart;
                --pEnd;
        }
        assert(pStart == pEnd || pStart - 1 == pEnd);

        return src_str;
}


//这是个使用<string.h>函数库的版本的reverse,因为有的时候不让用函数库,
//所以这里实现了两个,当然assert不算啊。。不然还要自己定义什么值是错误的。。
//这里图简便
char *reverseUseLibrary(char *str)
{
        assert(str != NULL);
    
        int i,j,c;
        for (i=0, j = strlen(str) -1; i < j; ++i, --j){
                c = str[j];
                str[j] = str[i];
                str[i] = c;
        }

        return str;
}


//将字符串转换为int
int atoi(char *str)
{
        assert(str != NULL);

        char    negtive = 0;    //检测是否是负数
        int     retval = 0;     //这个是真正返回值
        unsigned int num = 0;   //这个是怕溢出,弄了个中间值
        unsigned int intLimit = (num - 1) / 2;  //想法求了下机器int边界

//在C标准库中,库文件<limits.h>下,有个宏INI_MAX指示出 int的边界值
//但是这里我没用,用了个土法求int边界,主要还是怕库不让用,或者万一出现
//包含这个库出问题的情况。比如vc6.0。不知到为什么,我两台电脑,一个可以找到
//这个库文件,另一个找不到。。。晕了。。
        while (*str == ' ')
                ++str;
        if (*str == '-'){
                negtive = 1;
                ++str;
        }

        while (*str != '\0'){
                if (*str < '0' || *str >'9'){
                        printf("Invalidate argument\n");
                        return 0;
                }

                num *= 10;
                num += *str++ - '0';
                //检查看溢出没有
                if ( num > intLimit){
                        printf("Overflow\n");
                        return 0;
                }
        }

/*注 overflow实现的比较笨拙,看网上有个人实现的时候,用c++可以这样,如下
*                     overflow    
*           if(num > std::numeric_limits
  
  
   
   ::max())  
*             {  
*                  num = 0;  
*                  break;  
*             }
*他检查了一下是否溢出,感觉这个挺好的,他的num设的long long型
*/
        retval = (int)num;
        return  negtive == 1 ? 0 - retval : retval;
}


  
  


不知道是不是我使用方法不对,csdn上保存草稿总是出问题。没办法,先发出来吧。后面慢慢补充。谢谢


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值