You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中使用strtol从输入字符串提取两个整数?

提取第二个整数到val2变量的实现方法

你当前的代码已经通过strtok提取了操作符和第一个整数,要获取第二个整数存入val2,只需要重复提取令牌+转换整数的逻辑即可:

核心逻辑说明

  • strtok(NULL, " \t")每次调用都会返回当前字符串的下一个令牌(以空格或制表符分隔),所以在提取完第一个数字的令牌valstr后,再调用一次就能拿到第二个数字的字符串。
  • 拿到第二个数字的字符串后,用strtol重复转换流程,就能得到第二个整数存入val2。

修改后的完整代码示例

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>

// 假设myBST是已定义的二叉搜索树对象
// ...

int main() {
    std::string command;
    char* com = nullptr;
    char* op = nullptr;
    char* valstr = nullptr;
    char* dummy = nullptr;
    int val;
    int val2; // 新增val2变量存储第二个整数

    while (std::getline(std::cin, command)) 
    {
        com = strdup(command.c_str()); 
        op = strtok(com, " \t"); 

        // 提取第一个整数
        valstr = strtok(NULL, " \t"); 
        if (valstr != NULL) {
            val = strtol(valstr, &dummy, 10);
        }

        // 提取第二个整数
        valstr = strtok(NULL, " \t"); 
        if (valstr != NULL) {
            val2 = strtol(valstr, &dummy, 10);
        }

        if (strcmp(op,"i") == 0) // insert into list
        {
            std::cout << "Insert " << val << " and " << val2 << std::endl;
            // 这里可以根据需求调用myBST的相关方法,比如插入两个值
            myBST.insert(val);
            myBST.insert(val2);
        }

        free(com); // 注意释放strdup分配的内存,避免内存泄漏
    }
    return 0;
}

注意事项

  1. 必须先声明val2变量(类型为int),才能存储第二个整数。
  2. 每次调用strtok后都要判断返回值是否为NULL,避免传入空指针给strtol导致程序崩溃。
  3. strdup会在堆上分配内存,记得在循环末尾用free(com)释放,防止内存泄漏。

内容的提问来源于stack exchange,提问作者Shamil Magomedov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:10:26