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

如何拆分空格分隔的整数字符串并存入整数vector?

拆分空格分隔的整数字符串到整数vector的方法

嘿,这个需求太常见啦!在C++里有几种简单靠谱的实现方式,我给你分享两个最常用的方案:

方法一:使用stringstream(推荐,标准库原生)

这是我平时处理这类需求最喜欢用的方法,利用标准库的std::stringstream自动跳过空格的特性,代码简洁还不容易出错:

#include <iostream>
#include <vector>
#include <sstream>
#include <string>

int main() {
    std::string input = "116 119 220 250";
    std::vector<int> nums;
    std::stringstream ss(input);
    int num;
    
    // 循环读取每个整数,直到流中没有数据
    while (ss >> num) {
        nums.push_back(num);
    }
    
    // 可选:验证结果
    for (int n : nums) {
        std::cout << n << " ";
    }
    return 0;
}

原理说明:

  • std::stringstream会把输入字符串模拟成一个输入流,就像你从键盘读取数据一样
  • ss >> num操作会自动忽略所有空白字符(空格、换行、制表符都算),直接提取整数
  • 当流里没有更多整数可读时,ss >> num会返回false,循环自动结束

方法二:手动分割字符串(适合自定义分割规则的场景)

如果你需要更精细地控制分割逻辑(比如处理连续多个空格、或者混合其他分隔符),可以先把字符串拆成单个数字字符串,再逐个转换成整数:

#include <iostream>
#include <vector>
#include <string>
#include <cctype>

// 辅助函数:按空白字符分割字符串
std::vector<std::string> split(const std::string& s) {
    std::vector<std::string> tokens;
    std::string token;
    for (char c : s) {
        if (std::isspace(c)) {
            if (!token.empty()) {
                tokens.push_back(token);
                token.clear();
            }
        } else {
            token += c;
        }
    }
    // 处理最后一个未被分割的token
    if (!token.empty()) {
        tokens.push_back(token);
    }
    return tokens;
}

int main() {
    std::string input = "116 119 220 250";
    std::vector<int> nums;
    auto tokens = split(input);
    
    // 将每个数字字符串转为整数
    for (const std::string& token : tokens) {
        nums.push_back(std::stoi(token));
    }
    
    // 可选:验证结果
    for (int n : nums) {
        std::cout << n << " ";
    }
    return 0;
}

注意点:

  • std::stoi转换非法字符串会抛出异常,要是需要容错处理,可以改用std::strtol或者添加异常捕获逻辑
  • 这个方法灵活性更高,适合处理复杂的分隔场景

内容的提问来源于stack exchange,提问作者Muhammad Iqbal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:53:27