如何在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; }
注意事项
- 必须先声明
val2变量(类型为int),才能存储第二个整数。 - 每次调用
strtok后都要判断返回值是否为NULL,避免传入空指针给strtol导致程序崩溃。 strdup会在堆上分配内存,记得在循环末尾用free(com)释放,防止内存泄漏。
内容的提问来源于stack exchange,提问作者Shamil Magomedov
相关产品推荐
相关产品推荐

