C++分割字符串

2023-05-16

Python有自带的字符串分割函数,但是C++却没有,于是参考网上各种C++分割字符串的资源,将其整理如下

方法1:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

//字符串分割函数
vector<string> split(string str, string pattern)
{
    string::size_type pos;
    vector<string> result;
    //扩展字符串以方便操作
    str += pattern;
    int size = str.size();
    for (int i = 0; i < size; i++)
    {
        pos = str.find(pattern, i);
        if (pos < size)
        {
            string s = str.substr(i, pos - i);
            result.push_back(s);
            i = pos + pattern.size() - 1;
        }
    }
    return result;
}


int main()
{
    string str = "str1+str2+str3";
    string pattern = "+";
    vector<string> result = split(str, pattern);
    for (int i = 0; i < result.size(); i++)
    {
        cout << result[i] << endl;
    }
    return 0;
}

方法2:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <typeinfo>

using namespace std;
//1、该函数会改变原字符串的值
//2、该函数会根据delimiter里边的每一个字符进行分割,而非把delimiter作为一个整体
//3、相较于strtok()函数,strtok_s函数需要用户传入一个指针,用于函数内部判断从哪里开始处理字符串,其他的使用与strtok()函数相同
int main()
{
	//原始字符串
	char string[] = "A,string*of/tokens and some more,tokens";
	//分隔符
	char delimiter[] = ",*/ ";
	//存储返回结果
	char* result = NULL;
	//context没有过于的作用,只是一个参数而已
	char* context = NULL;
	
	//返回切割的第一个结果
	result = strtok_s(string, delimiter, &context);
	printf("[string]:%s\n", string);
	while (result != NULL) {
		printf("[result]:%s\n", result);
		result = strtok_s(NULL, delimiter, &context);
	}
	return 0;
}

方法3:

#include<string>
#include<vector>
#include<iostream>
using namespace std;

void Tokenize(const string& str, vector<string>& tokens, const string& delimiters)
{
    // Skip delimiters at beginning.
    string::size_type lastPos = str.find_first_not_of(delimiters, 0);
    // Find first "non-delimiter".
    string::size_type pos = str.find_first_of(delimiters, lastPos);
    while (string::npos != pos || string::npos != lastPos)
    {
        // Found a token, add it to the vector.
        tokens.push_back(str.substr(lastPos, pos - lastPos));
        // Skip delimiters.  Note the "not_of"
        lastPos = str.find_first_not_of(delimiters, pos);
        // Find next "non-delimiter"
        pos = str.find_first_of(delimiters, lastPos);
    }
}
int main(int argc, char* argv[])
{
    string str("====aaa==bbb==ccc==ddd====eeee*****eeeee");
    vector<string> results;
    Tokenize(str, results, "=*");
    for (int i = 0; i < results.size(); i++)
    {
        cout << results[i] << endl;
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++分割字符串 的相关文章

随机推荐

  • Windows下 VC++的内存泄漏与定位

    1 利用系统带的函数 xff1a EnableMemLeakCheck 和 函数重载 xff0c 能快速准备的定位到内存泄漏的地方 span class token macro property span class token direc
  • VS2013不支持多字节字符集的解决办法

    刚刚在做MFC下的P2P通信发现VS2013不支持多字节字符集 xff0c mark一下 解决办法 xff1a 到http www microsoft com zh cn search DownloadResults aspx rf 61
  • PAT+1017+A除以B

    A除以B 20 本题要求计算A B xff0c 其中A是不超过1000位的正整数 xff0c B是1位正整数 你需要输出商数Q和余数R xff0c 使得A 61 B Q 43 R成立 输入格式 xff1a 输入在1行中依次给出A和B xff
  • TIOBE 5月编程语言排行榜:C#最受欢迎,C++即将冲进前三

    TIOBE 5月的榜单 xff0c 将技术更新迭代体现的淋漓尽致 我们先看榜单 xff1a 单独和4月的榜单相比 xff0c 是没有明显的位置变化 xff0c 尤其是前五名的排名完全没变 但是我们进步来看 xff0c net在2021年年尾
  • PAT1018锤子剪刀布 (20)

    include using namespace std int N int ping 61 0 int AB AJ AC int BB BJ BC int AW 61 0 int BW 61 0 int main cin gt gt N c
  • 1019. 数字黑洞

    include include using namespace std int big small void xin int x int a 4 a 3 61 x 10 x 61 x 10 a 2 61 x 10 x 61 x 10 a 1
  • 2021-09-03 eventlog对应各标识表示的含义

    当前联想设备路径 system etc event log tags eventlog中各标识表示的含义 当前看的比较多的标识 am pss 42 answer to life the universe etc 3 314 pi 1003
  • ubuntu中shell命令方括号[]出现“not found” “未找到命令”问题

    ubuntu中shell命令方括号 出现 not found 未找到命令 问题 1 问题现象 在ubuntu中进行shell script或者shell命令时 xff0c 用到方括号进行判断的时候出现了 not found 或者 未找到命令
  • 在unbuntu上使sqlite数据库显示格式规整

    在unbuntu上使sqlite数据库显示格式规整 虚拟机的数据库中 xff0c 很多时候显示的数据都是比较凌乱的 xff0c 每次打开数据库想查看数据 xff0c 都需要自行设置数据格式 xff0c 才能使数据库的数据显示整齐 下图是显示
  • RV1109开发板ssh服务器移植到arm开发板

    RV1109开发板ssh服务器移植到arm开发板 ssh功能移植到RV1109开发板的 xff0c 由于RV1109的SDK中 xff0c 没有telnet功能 xff0c 有时候adb功能在量产中需要关闭 xff0c 避免造成设备留有漏洞
  • Telnet移植到开发板

    Telnet移植到开发板 Telnet有什么作用 Telnet是一种远程登录协议 xff0c 它是一种重要的远程登录工具 嵌入式设备进行开发的时候 xff0c Telnet可以通过网口 xff0c 进行开发板与虚拟机之间进行通信 下载源码
  • 虚拟机修改交叉工具链路径

    标题虚拟机修改交叉工具链路径 把工具链解压到系统根目录 sudo tar xvf rv1126 rv1109 compiler 20201214 tar gz C 设置临时工具链环境变量 执行以下命令后 xff0c 当前终端窗户即可使用工具
  • VSCode快捷方式

    1 查看函数定义 xff1a Ctrl 43 鼠标左击跳到定义 2 查看完成后 xff0c 函数返回 xff1a Windows Alt 43 或者 鼠标侧键 Linux Ctrl 43 Alt 43 Mac Ctrl 43 3 撤销 xf
  • Typora编辑的markdown文档莫名其妙消失或未保存,两种恢复方式

    方式一 xff1a 一 打开typora 二 文件 偏好设置 三 点击未保存的草稿没找到最近的文件恢复即可 方式二 xff1a 打开C Users 计算机用户名 AppData Roaming Typora draftsRecover便可以
  • 2022年6月TIOBE编程语言排名:Python、C、Java

    2022年6月TIOBE编程语言排名 xff1a Python C Java 6 月榜单中TIOBE 官方用 C 43 43 即将超越 Java 为标题凸显出了最大的变化 xff0c 早在2021年 xff0c Python 在人工智能这条
  • neo4j desktop 重装几次之后,数据库出现感叹号

    问题 xff1a neo4j desktop 重装几次之后 xff0c 数据库出现感叹号 xff0c 而且出现了以前的数据库 xff0c 且无法删除 截图如下 xff1a 原因 xff1a 上次卸载不彻底 xff0c 存在系统缓存文件 新软
  • latex 编译 bib文件 的操作步骤

    本人使用的编辑软件 xff0c Texworks xff08 live自带的编辑工具 xff09 1 编译 tex文件 xff08 确保无报错 xff09 生成pdf 2 编译 bib文件 xff08 确保无报错 xff09 3 编译 te
  • 解决电脑能上网不能登陆QQ-已测试并解决

    方法1 现在常用的一种方法 xff1a 先连接手机热点 xff0c 然后等登录上后突然断开 xff0c 重新连回自己的网络 方法2 https blog csdn net qq 41862220 article details 109686
  • HTML页面中文字增多,字号会突然变大

    DIV中的文字超过一定数量之后 xff0c 在浏览器上显示突然变大 xff0c 与CSS设定的字号大小严重不符合 解决办法 xff1a 父级DIV添加CSS属性 height 100 或者 随便设置一个高度 这个问题很奇怪 xff0c 之前
  • C++分割字符串

    Python有自带的字符串分割函数 xff0c 但是C 43 43 却没有 xff0c 于是参考网上各种C 43 43 分割字符串的资源 xff0c 将其整理如下 方法1 xff1a include lt string h gt inclu