面试题4

C语言相关

  1.实现atoi()

/*  atoi()
 *  作用:将字符串转换整形
 *  bug:未对溢出处理
 *  版本:v0.1
 *  作者:机器学习_佟铁
 *  时间:20140712
 */
#include<stdio.h>
#include<ctype.h>
#define N 30

int ato_i(char *s)
{
    int sign=1,result=0;    //sign表示正负,result返回结果,非数字字符串返回0
    while(isspace(*s))  //忽略空白
        s++;
    if(s && *s=='-')
    {
        sign=-1;
        s++;
    }
    if(s && *s=='+')
        s++;
    while(s && isdigit(*s))
    {
        result=result*10+(*s-'0');
        s++;
    }
    result=result*sign;
    return result;
}

int main()
{
    char s[N];
    scanf("%s",s);  //读入到s时,前提是s必须有自己的空间。
    printf("%d
",ato_i(s));
    return 0;
}

  2.对于宏 #define SQUARE(x) (x)*(x)有何错误?

  答:如果输入x++,x将被求值两次。

  3.如何用一行代码确定n是不是2的幂,不能用循环?

  答:(n&n-1)==0?true:false;

  参考:atoi函数实现ctype.hasciic运算符优先级

原文地址:https://www.cnblogs.com/jhooon/p/3840602.html