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

188 天前
 fallshuang

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

主要的工作内容是新能源汽车,船等的嵌入式开发。 唯一的条件是:熟悉 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

1334 次点击
所在节点    酷工作
10 条回复
chingyat
188 天前
输入的数字都当作十进制吗?以 0 开头的话怎么算?
lykhero
188 天前
atoi
2532937079mao
188 天前
待遇咋样?
nuk
188 天前
感觉可以考虑的范围就是检查指针,检查溢出,检查字符串长度,atoi 不会检查字符串长度,在嵌入式里面还是可能会卡 watchdog 吧
gof817
188 天前
虽然觉得这种直接把题发出来都是钓鱼的。。我用了 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
188 天前
可能用状态机代码会好看一些
rimworld
187 天前
@gof817 还可以写个 26 个大小写英文字母数组。首个字符在这里面,就可以直接 return 0 了。
gof817
187 天前
@rimworld 那样太麻烦了,还有很多符号啊中文之类的要处理,这里直接用了标准库的 isdigit 。
如果不想用标准库,那自己写直接判断 ascii 码范围就行。
就这样. 伪代码
`s[i] - '0' < 10u`
当前的 ascii 码减去字符'0'的 ascii 码,如果差值在 10 以内就说明是个数字的 ascii 码。这样不需要申请数组的内存,也不需要遍历,只要简单的数学运算就行。
VisualStudioCode
187 天前
'-03'的预期输出是什么?
handsome11
185 天前
武汉有几个人听过 V2EX ?瞎折腾吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/988398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX