跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

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::stringint,并在转换失败的时候跳过此行。

以前用 c 做过类似的内容,感觉还是比较简单的。


原题大概翻译如下:

  1. stdin 读入数据,每行一个;跳过非数字数据。
  2. 将读入的数字导入到一个 std::vector
  3. std::vector 转换成一个 class node 的链表,自行设计接口与实现该类。
  4. 对这个链表进行一些处理(※ 细节省略)。

知识共享许可协议 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

评论区