C++ - 转换 string 到 int
写的比较随意,在面试的 OJ 系统里还忘了判定空字符的情况…
bool is_digit(const char c)
{
return (c >= '0') && (c <= '9');
}
bool parse_number(std::string& str, int& val)
{
const char* c = str.c_str();
bool neg = false;
if (*c == '-') {
neg = true;
c++;
}
// empty string
if (!*c)
{
return false;
}
val = 0;
while(*c)
{
if (!is_digit(*c))
{
return false;
}
val = val * 10 + (*c - '0');
c++;
}
if (neg)
{
val = -val;
}
return true;
}
面试的题只有一个,就是在不使用 std::list
的情况下实现一个简单的链表。
数据源来自 stdin
管道,题目要求展示面试者所熟悉的一些 C++ 新标准特性(如 C++14),于是我最开始用的是 while(!std::cin.eof())
与 int val; std::cin >> val;
的组合。结果在遇到非数字的情况下会死循环导致运行超时,只好自己实现了一个简单的 std::string
转 int
,并在转换失败的时候跳过此行。
以前用 c 做过类似的内容,感觉还是比较简单的。
原题大概翻译如下:
- 从
stdin
读入数据,每行一个;跳过非数字数据。 - 将读入的数字导入到一个
std::vector
。 - 将
std::vector
转换成一个class node
的链表,自行设计接口与实现该类。 - 对这个链表进行一些处理(※ 细节省略)。