使用stringstream和getline是C++中分割字符串的常用方法。通过将字符串载入stringstream,再用getline按分隔符提取子串并存入vector,可高效实现split功能。示例代码展示了以逗号分割”apple,banana,orange”为三个元素的过程。该方法自动处理连续分隔符并保留空字段,若需过滤空字符串可在push_back前添加!item.empty()判断。对于空白字符或单一分隔符仍适用此法;若需多字符分隔或更复杂逻辑,可结合find与substr手动分割:通过find定位分隔符位置,substr截取片段,最后补上末尾部分。此方式性能略优但代码较长,适合高效率需求场景。总体推荐优先采用stringstream+getline方案,因其代码简洁、易维护,适用于大多数情况。

在C++中,分割字符串并存入vector是一个常见需求,比如处理CSV数据或解析命令行参数。C++标准库没有内置的split函数,但可以通过std::stringstream结合std::getline高效实现。
使用stringstream和getline分割字符串
这是最常用且简洁的方法。将字符串加载到std::stringstream中,然后用std::getline按指定分隔符提取子串。
示例代码:
#include
#include
#include
#include
std::vector split(const std::string& str, char delim) {
std::vector result;
std::stringstream ss(str);
std::string item;
while (std::getline(ss, item, delim)) {
result.push_back(item);
}
return result;
}
// 使用示例
int main() {
std::string input = "apple,banana,orange";
std::vector parts = split(input, ',');
for (const auto& part : parts) {
std::cout << part << std::endl;
}
return 0;
}
该方法自动处理连续分隔符(多个逗号),但会保留空字段。若想过滤空字符串,可在push_back前判断!item.empty()。
立即学习“C++免费学习笔记(深入)”;
处理空白字符或多种分隔符
如果分隔符是空格、制表符等,仍可用相同方法。对于复杂分隔(如多个字符),可借助std::find或正则表达式。
简单跳过空字段的修改:
while (std::getline(ss, item, delim)) {
if (!item.empty()) {
result.push_back(item);
}
}
使用find和substr手动分割
适用于需要更精确控制的场景。通过std::string::find查找分隔符位置,再用substr截取片段。
std::vector split_manual(const std::string& str, char delim) {
std::vector result;
size_t start = 0;
size_t end = str.find(delim);
while (end != std::string::npos) {
result.push_back(str.substr(start, end - start));
start = end + 1;
end = str.find(delim, start);
}
result.push_back(str.substr(start)); // 添加最后一段
return result;
}
这种方法性能略高,但代码稍长,适合对效率要求较高的场合。
基本上就这些。推荐优先使用stringstream + getline方式,代码清晰、易维护,适合大多数情况。
以上就是c++++如何分割字符串并存入vector _c++字符串分割与存储技巧的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1482310.html
微信扫一扫
支付宝扫一扫