istringstream无法提取嵌套字符中的整数token问题咨询
解决方案
你可以修改原有逻辑,不再局限于判断整个token是否为纯整数,而是对每个分割后的token,从中提取所有连续的数字序列并转换为整数,这样既能兼容原本空格分隔的纯整数场景,也能处理被其他字符包裹的整数。
修改后的代码示例:
#include <iostream> #include <list> #include <string> #include <sstream> #include <cctype> // 从单个字符串中提取所有整数并添加到目标列表 void extractIntegers(const std::string& str, std::list<int>& integersList) { std::string numBuffer; for (char c : str) { if (std::isdigit(c)) { numBuffer += c; } else if (!numBuffer.empty()) { // 遇到非数字字符且已有累积的数字,转换为整数存入列表 integersList.push_back(std::stoi(numBuffer)); numBuffer.clear(); } } // 处理字符串末尾残留的数字序列 if (!numBuffer.empty()) { integersList.push_back(std::stoi(numBuffer)); } } int main() { std::istringstream iss("测试文本 U<sub>54778</sub><br 987 654"); std::list<int> integersList = {}; std::string token; while (iss >> token) { int tempNum; // 先尝试处理纯整数token if (std::stringstream(token) >> tempNum) { integersList.push_back(tempNum); } else { // 非纯整数token,调用提取函数挖取其中的整数 extractIntegers(token, integersList); } } // 输出验证结果 for (int num : integersList) { std::cout << num << " "; } return 0; }
逻辑说明:
- 新增的
extractIntegers函数会遍历字符串的每个字符,累积连续的数字字符;遇到非数字字符时,若已有累积的数字则转换为整数存入列表,同时清空缓存。 - 保留原有逻辑处理空格分隔的纯整数token,对于无法直接转换的token,调用提取函数处理,兼顾两种场景的需求。
内容的提问来源于stack exchange,提问作者wpdkawopdj
相关产品推荐
相关产品推荐

