如何拆分空格分隔的整数字符串并存入整数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
相关产品推荐
相关产品推荐

