C++实现字符串切割的两种方法

yizhihongxing

C++实现字符串切割的两种方法

在C++中,经常需要将字符串按照指定的分隔符进行切割,得到分割后的子字符串。本文将会介绍两种实现字符串切割的方法。

方法一:使用STL库中的stringstream

在C++中,STL库中的stringstream类可以方便地将字符串转换为其他数据类型,同时也能够按照指定的分隔符对字符串进行切割。具体的实现方法如下:

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

std::vector<std::string> split(const std::string& s, char delim) {
    std::stringstream stream(s);
    std::vector<std::string> result;
    std::string token;
    while (std::getline(stream, token, delim)) {
        result.push_back(token);
    }
    return result;
}
  • split函数接受两个参数,第一个参数s是需要切割的字符串,第二个参数delim是分隔符;
  • stringstream类的构造函数接受一个字符串参数,该参数是需要分割的字符串;
  • 在循环中,使用std::getline函数按照指定的分隔符对字符串进行切割,并将切割后的子字符串存储到容器中;
  • 最后返回存储所有子字符串的容器。

以下是一个示例代码:

#include <iostream>
#include <vector>

std::vector<std::string> split(const std::string& s, char delim) {
    std::stringstream stream(s);
    std::vector<std::string> result;
    std::string token;
    while (std::getline(stream, token, delim)) {
        result.push_back(token);
    }
    return result;
}

int main() {
    std::string s = "hello,world,how,are,you";
    std::vector<std::string> result = split(s, ',');
    for (const auto& token : result) {
        std::cout << token << std::endl;
    }
    return 0;
}

以上代码输出结果为:

hello
world
how
are
you

方法二:使用C语言中的strtok函数

除了使用STL库中的stringstream类之外,还可以使用C语言中的strtok函数对字符串进行切割。具体实现方法如下:

#include <cstring>
#include <vector>

std::vector<std::string> split(const std::string& s, char delim) {
    char* buffer = new char[s.size() + 1];
    std::strcpy(buffer, s.c_str());
    char* token = std::strtok(buffer, &delim);
    std::vector<std::string> result;
    while (token != nullptr) {
        result.push_back(token);
        token = std::strtok(nullptr, &delim);
    }
    delete[] buffer;
    return result;
}
  • split函数接受两个参数,第一个参数s是需要切割的字符串,第二个参数delim是分隔符;
  • 在函数内部申请一个大小为s.size() + 1的字符数组buffer用于存储切割后的字符串,同时将s的内容拷贝到buffer中;
  • 调用strtok函数对buffer进行切割,并将切割后的子字符串存储到容器中;
  • 重复上一步直到所有子字符串都被切割完毕,最后返回存储所有子字符串的容器。

以下是一个示例代码:

#include <iostream>
#include <vector>

std::vector<std::string> split(const std::string& s, char delim) {
    char* buffer = new char[s.size() + 1];
    std::strcpy(buffer, s.c_str());
    char* token = std::strtok(buffer, &delim);
    std::vector<std::string> result;
    while (token != nullptr) {
        result.push_back(token);
        token = std::strtok(nullptr, &delim);
    }
    delete[] buffer;
    return result;
}

int main() {
    std::string s = "hello,world,how,are,you";
    std::vector<std::string> result = split(s, ',');
    for (const auto& token : result) {
        std::cout << token << std::endl;
    }
    return 0;
}

以上代码输出结果与前一个示例相同。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现字符串切割的两种方法 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • 微信小程序开发实现的IP地址查询功能示例

    ip: ip }, success: (res) => { const result = res.data.result; // 假设API返回的结果中有一个result字段 this.setData({ result: result }); }, fail: (error) => { console.error(‘查询失败’, error); …

    other 2023年7月31日
    00
  • C++运算符重载三种形式(成员函数,友元函数,普通函数)详解

    C++运算符重载三种形式详解 在C++中,运算符重载是一种非常强大的机制,可以根据不同的需求重载各种运算符。在运算符重载中,常见的有成员函数、友元函数和普通函数三种形式,本文将详细介绍这三种形式的使用方法和注意事项。 成员函数形式 成员函数形式是在类内部定义的一个成员函数,其函数名以运算符关键字开头,在函数定义中并没有指定访问级别。当运算符作用于类的对象时,…

    其他 2023年3月28日
    00
  • 详解iOS开发中UIPickerView控件的使用方法

    详解iOS开发中UIPickerView控件的使用方法 简介 UIPickerView是iOS中常用的一种UI控件,用于显示一组可选的数据,并让用户从中选择一个。它通常是作为表单中的一部分,用于选择日期、时间、地址、性别等选项。本篇文章将详细介绍UIPickerView的使用方法。 基本用法 1. 创建UIPickerView对象 可以通过代码或xib/st…

    other 2023年6月20日
    00
  • RSync实现文件同步备份配置详解

    RSync实现文件同步备份配置详解 什么是RSync RSync (remote synchronization) 是一个快速、灵活、可靠的远程文件复制工具。 常用于将数据从一个位置同步到另一个位置(比如从本地服务器同步到远程服务器),也用于备份、镜像、迁移数据。 RSync具有以下特点: 可以在本地或远程之间进行同步,支持使用SSH等网络协议进行安全连接 …

    other 2023年6月25日
    00
  • vue eslint报错error “Component name “*****” should always be multi-word”解决

    针对问题 “Component name should always be multi-word” 的 eslint 报错,我们可以通过以下步骤来解决: 了解问题原因 顾名思义,“Component name should always be multi-word” 的报错意思是组件名应该使用多个单词。这个规则是 eslint-plugin-vue 内置的一…

    other 2023年6月26日
    00
  • tomcat的热部署配置

    以下是详细讲解“Tomcat的热部署配置的完整攻略”,过程中至少包含两条示例说明的标准Markdown格式文本: Tomcat的热部署配置的完整攻略 Tomcat是常用的Java Web应用服务器,支持热部署功能,可以在不重启服务器的情况下更新应用程序。本文将介绍如配置Tomcat的热部署功能,包括使用Tomcat Manager和使用JRebel插件。 使…

    other 2023年5月10日
    00
  • 如何使用织梦tag列表调用自定义字段附加字段?

    如何使用织梦tag列表调用自定义字段附加字段? 开启自定义字段附加字段功能在织梦后台的“系统管理”->“系统基本参数设置”->“内容管理参数”中,找到“是否使用自定义字段附加字段”,选择“使用”,并保存更改。 为文章添加自定义字段和附加字段在文章编辑页面找到“自定义字段”部分,填写自定义字段名称和对应的值。例如,可以添加一个名为“banner”值…

    other 2023年6月25日
    00
  • Linux基础知识99问(五)

    下面是 Linux基础知识99问(五) 的完整攻略: 标题:Linux文件权限和安全 问题1:文件的访问权限有哪些?如何查看? 文件的访问权限包括读取权限、写入权限和执行权限,对应的英文缩写分别是 r、w 和 x,它们可用以下方式表示: r:表示读权限; w:表示写权限; x:表示执行权限。 我们可以使用命令 ls -l 查看文件的权限,权限信息在第一列,如…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部