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

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日

相关文章

  • 机器人操作系统(ros)教程4:ros的框架【转】

    机器人操作系统(ROS)教程4: ROS的框架【转】 ROS是一个流行的机器人操作系统,具有广泛的应用。本篇文章将介绍ROS的框架,帮助读者更好地理解ROS系统的结构,并为想要深入了解ROS系统的用户提供帮助。 ROS系统的结构 ROS系统的设计结构是基于一组相互独立的节点(nodes)的,每一个节点针对特定的任务进行设计和实现。ROS节点可以是C++,Py…

    其他 2023年3月29日
    00
  • FileZilla Server 搭建安全高效简洁的FTP服务器

    搭建安全高效简洁的FTP服务器 – FileZilla Server 简介 FileZilla是一款开源的FTP客户端和服务器软件,支持Windows、Linux和Mac操作系统。我们可以借助FileZilla Server来建立自己的FTP服务器,实现文件上传与下载、数据备份和共享等功能。本攻略将详细介绍如何在Windows环境下搭建FileZilla S…

    other 2023年6月27日
    00
  • 苹果iOS10 GM开发者预览版固件下载地址汇总(附升级方法)

    苹果iOS10 GM开发者预览版固件下载地址汇总(附升级方法) 什么是iOS 10 GM开发者预览版 iOS 10 GM开发者预览版是苹果公司在正式发布iOS 10之前向开发者和测试人员推出的一款预览版本,用于测试和验证新功能和应用在各种设备上的兼容性。GM版是指Golden Master版,通常是最终版本的候选版,在没有大问题的情况下就会成为正式版发布。 …

    other 2023年6月26日
    00
  • 电脑IP地址在哪里查看?如何快速查看电脑IP地址?

    电脑IP地址的查看 电脑的IP地址是用于在网络中标识和定位设备的唯一标识符。在Windows和Mac操作系统中,可以通过以下步骤快速查看电脑的IP地址。 在Windows操作系统中查看IP地址 打开开始菜单,点击\”设置\”图标。 在设置窗口中,点击\”网络和Internet\”选项。 在\”网络和Internet\”页面中,点击\”状态\”选项卡。 在状态…

    other 2023年7月29日
    00
  • apacheftpserver的简单入门(java应用内嵌ftpserver)

    当然,我很乐意为您提供有关“Apache FtpServer的简单入门(Java应用内嵌FtpServer)”的完整攻略。以下是详细的步骤和两个示例: 1 Apache FtpServer的简单入门 Apache FtpServer是一个基于Java的FTP服务器,可以轻松地将FTP功能集成到Java应用程序中。以下是使用Apache FtpServer的简…

    other 2023年5月6日
    00
  • arduino图形化编程——ardublock

    Arduino图形化编程——Ardublock Arduino是一个极为流行的单片机平台,它采用开源软硬件,且价格亲民,因此受到了广泛的欢迎和推崇。不过,对于大部分初学者来说,Arduino编程语言的学习曲线往往比较陡峭,尤其是对于那些从未接触过任何编程语言的新手,学习起来难度更是倍增。为了解决这个问题,Ardublock应运而生。 Ardublock简介 …

    其他 2023年3月29日
    00
  • 右键发送(sendto),创建快捷方式到自定义的位置

    以下是详细的攻略: 安装SendTo Toys工具 首先,我们需要安装一个名为”SendTo Toys”的免费工具,它可以帮助我们创建自定义的”Send to”菜单项。 浏览器中打开http://gabrieleponti.com/software/send-to-toys,下载并安装SendTo Toys工具。 安装完成后,在”开始菜单”中打开”SendT…

    other 2023年6月27日
    00
  • Java为实体类动态添加属性的方法详解

    Java为实体类动态添加属性的方法详解 有时候我们需要在运行时动态地为实体类添加属性,以满足特定的业务需求。以下是实现这一目标的两种常见方法: 方法一:使用Map作为属性容器 可以使用一个Map对象作为实体类的属性容器,动态地向Map中添加属性。示例代码如下: public class DynamicEntity { private Map<Strin…

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