V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fallshuang
V2EX  ›  酷工作

武汉招聘熟悉 C 语言的工程师(应届生也可以)

  •  
  •   fallshuang · 176 天前 · 1313 次点击
    这是一个创建于 176 天前的主题,其中的信息可能已经有所发展或是发生改变。

    单位: 武汉智能控制工业技术研究院

    主要的工作内容是新能源汽车,船等的嵌入式开发。 唯一的条件是:熟悉 C 语言。能完成下面这个简单的面试题:

    写一个函数 int str2int(char * s) 把字符串返回为 int , 如果输入不是数字字符串,返回 0 譬如 "99" -> 99 "-123" -> -123 "78Hello" -> 78 "Hello" -> 0 "72.35" -> 72 "-66-abc" -> -66 "abc-66" -> 0 "2****2" -> 2 注意: 无论输入任何字符串,这个程序都不应当崩溃。如果输入出现异常(譬如输入是一个"hello"字符串) ,则返回 0 。输入可能是任意 char *, 返回值必须是 int , 请仔细考虑 .
    这个题目很简单,请用标准 C 做, 需要考虑各种异常情况 , 难点在于你是否考虑了足够的异常情况

    不需要加班,双休

    简历发送至公司 email:aHVhbmdib0BpY2l3aC5jb20= ( base64 编码) 如果公司 email 因为垃圾邮件设置发送失败,就发到: MTQ4ODIzNjdAcXEuY29t

    10 条回复    2023-11-06 10:32:42 +08:00
    chingyat
        1
    chingyat  
       176 天前 via iPhone
    输入的数字都当作十进制吗?以 0 开头的话怎么算?
    lykhero
        2
    lykhero  
       176 天前
    atoi
    2532937079mao
        3
    2532937079mao  
       176 天前
    待遇咋样?
    nuk
        4
    nuk  
       176 天前
    感觉可以考虑的范围就是检查指针,检查溢出,检查字符串长度,atoi 不会检查字符串长度,在嵌入式里面还是可能会卡 watchdog 吧
    gof817
        5
    gof817  
       176 天前
    虽然觉得这种直接把题发出来都是钓鱼的。。我用了 IDE 提示写的,现场用笔徒手写在纸上才是猛人
    ```c
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>

    int str2int(char *s) {
    if (s == NULL) {
    return 0;
    }

    int sign = 1;
    int result = 0;
    int i = 0;

    // 判断字符串是否为空
    if (strlen(s) == 0) {
    return 0;
    }

    // 判断字符串是否以 '-' 开头,如果是则设置符号为负数
    if (s[0] == '-') {
    sign = -1;
    i++;
    }

    // 遍历字符串,将数字字符转换为整数并累加
    while (isdigit(s[i])) {
    int digit = s[i] - '0';
    if (result > INT_MAX / 10 || (result == INT_MAX / 10 && digit > 7)) {
    return 0;
    }
    result = result * 10 + digit;
    i++;
    }

    return result * sign;
    }
    ```
    iOCZ
        6
    iOCZ  
       176 天前
    可能用状态机代码会好看一些
    rimworld
        7
    rimworld  
       175 天前 via iPhone
    @gof817 还可以写个 26 个大小写英文字母数组。首个字符在这里面,就可以直接 return 0 了。
    gof817
        8
    gof817  
       175 天前
    @rimworld 那样太麻烦了,还有很多符号啊中文之类的要处理,这里直接用了标准库的 isdigit 。
    如果不想用标准库,那自己写直接判断 ascii 码范围就行。
    就这样. 伪代码
    `s[i] - '0' < 10u`
    当前的 ascii 码减去字符'0'的 ascii 码,如果差值在 10 以内就说明是个数字的 ascii 码。这样不需要申请数组的内存,也不需要遍历,只要简单的数学运算就行。
    VisualStudioCode
        9
    VisualStudioCode  
       175 天前
    '-03'的预期输出是什么?
    handsome11
        10
    handsome11  
       173 天前
    武汉有几个人听过 V2EX ?瞎折腾吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1493 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:56 · PVG 00:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.