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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:15:13