C/C++.字符串分割
1、ZC:只测试使用了 自己改编的函数SplitStr_ZZ(...),其它的 未测试
#include <string>
#include <vector>
#include <algorithm>// std::replace_if
using namespace std; // std__string 字符串切割 - 漆天初晓 - 博客园.html (https://www.cnblogs.com/tyche116/p/9377330.html) // 用单字符作为分隔
vector<string> SplitStr(string strtem, char a)
{
vector<string> strvec; string::size_type pos1, pos2;
pos2 = strtem.find(a);
pos1 = ;
while (string::npos != pos2)
{
strvec.push_back(strtem.substr(pos1, pos2 - pos1)); pos1 = pos2 + ;
pos2 = strtem.find(a, pos1);
}
strvec.push_back(strtem.substr(pos1));
return strvec;
} // 由多个分隔符来分隔:
std::vector<std::string> SplitString(string _strSrc, string _strDelimiter, bool _bRepeatedCharIgnored)
{
vector<string> resultStringVector;
replace_if(_strSrc.begin(), _strSrc.end(),
[&](const char& c)
{
if (_strDelimiter.find(c) != string::npos)
{ return true; } else { return false; }
}/*pred*/, _strDelimiter.at()); //将出现的所有分隔符都替换成为一个相同的字符(分隔符字符串的第一个)
size_t pos = _strSrc.find(_strDelimiter.at());
std::string addedString = "";
while (pos != std::string::npos) {
addedString = _strSrc.substr(, pos);
if (!addedString.empty() || !_bRepeatedCharIgnored) {
resultStringVector.push_back(addedString);
}
_strSrc.erase(_strSrc.begin(), _strSrc.begin() + pos + );
pos = _strSrc.find(_strDelimiter.at());
}
addedString = _strSrc;
if (!addedString.empty() || !_bRepeatedCharIgnored) {
resultStringVector.push_back(addedString);
}
return resultStringVector;
} /*
C++ 分割字符串两种方法 - 盛开的石头 - 博客园.html(https://www.cnblogs.com/stonebloom-yu/p/6542756.html)
2、通过使用strtok()函数实现
原型:char *strtok(char *str, const char *delim);
功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。
描述:strtok()用来将字符串分割成一个个片段。
参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时 则会将该字符改为\0 字符。
在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回被分割出片段的指针。
其它:strtok函数线程不安全,可以使用strtok_r替代。
*/
vector<string> SplitStr_S(const string &str, const string &pattern)
{
//const char* convert to char*
char * strc = new char[strlen(str.c_str()) + ];
strcpy(strc, str.c_str());
vector<string> resultVec;
char* tmpStr = strtok(strc, pattern.c_str());
while (tmpStr != NULL)
{
resultVec.push_back(string(tmpStr));
tmpStr = strtok(NULL, pattern.c_str());
} delete[] strc; return resultVec;
} // ZC:上面是 查阅到的资料,下面是 我自己改编的代码 // ZC: 函数strtok(...)的参数 是只能一个字符作为分隔符?还是有什么通配符规则(类似正则表达式之类的)?没测试...
void SplitStr_ZZ(vector<string>& _vtr, char* _pc, char* _pcPattern)
{
_vtr.clear();
if ((_pc == NULL) || (_pcPattern == NULL))
return; char* pc = strtok(_pc, _pcPattern);
while (pc != NULL)
{
_vtr.push_back(string(pc)); pc = strtok(NULL, _pcPattern);
} }
2、调用代码
int main(int argc, char *argv[])
{
char* pc = (char*)"AAA=";
int iLen = strlen(pc);
char* pcc = new char[iLen +];
pcc[iLen] = '\0';
memcpy(pcc, pc, iLen); vector<string> vtr;
SplitStr_ZZ(vtr, pcc, (char*)"=");
for (int i = ; i < vtr.size(); i++)
{
printf("%s\n", vtr.at(i).c_str());
} system("pause");
return ;
}
ZC:注意点:(1)传给 strtok(...)的第一个参数不能是 常量(PE结构常量段),会报内存错误
ZC: (2)若 分隔符后面没有内容了,或 未分割字符串(例如分隔符为"B"的情况),则 返回的 vector只包含一个元素
3、
4、
5、
C/C++.字符串分割的更多相关文章
- SQL Server 游标运用:鼠标轨迹字符串分割
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 游标模板(Cursor Template) 鼠标轨迹字符串分割SQL脚本实现(SQL Code ...
- Oracle 超长字符串分割劈分
Oracle 超长字符串分割劈分,具体能有多长没测过,反正很大.... 下面,,,,直奔主题了: CREATE OR REPLACE FUNCTION splitstr(p_string IN clo ...
- php学习零散笔记—字符串分割、fetch函数和单双引号。
1 字符串分割——split()函数和preg_split()函数 split — 用正则表达式将字符串分割到数组中——貌似PHP5.3以上已不赞成使用 array split ( string $p ...
- 工作中用到的oracle字符串分割整理
oracle部分: 定义类型(用于字符串分割): create or replace TYPE "STR_SPLIT" IS TABLE OF VARCHAR2 (4000); 字 ...
- Python 字符串分割的方法
在平时工作的时候,发现对于字符串分割的方法用的比较多,下面对分割字符串方法进行总结一下:第一种:split()函数split()函数应该说是分割字符串使用最多的函数用法:str.split('分割符' ...
- 在C++中实现字符串分割--split
字符串分割 在一些比较流行的语言中,字符串分割是一个比较重要的方法,不论是在python,java这样的系统级语言还是js这样的前端脚本都会在用到字符串的分割,然而在c++中却没有这样的方法用来调用. ...
- 随笔 JS 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里
JS /* * 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里 * @id 要插入到DOM元素的ID * * 输入值为图片URL 字符串 * */ function addImages(i ...
- js 字符串分割成字符串数组 遍历数组插入指定DOM里 原生JS效果
使用的TP3.2 JS字符串分割成字符串数组 var images='{$content.pictureurl} ' ;结构是这样 attachment/picture/uploadify/20141 ...
- oracle根据分隔符将字符串分割成数组函数
--创建表类型 create or replace type mytype as table of number;--如果定义成varchar--CREATE OR REPLACE type myty ...
- hive函数 -- split 字符串分割函数
hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...
随机推荐
- pycharm分辨率&清晰度
三个月前换了新电脑,安装pycharm.又换了新的大屏幕. pycharm界面拖到大屏上时,字大小和字体都没有变化,清晰度低了很多,就像打了一层薄薄的马赛克一样.拖回到原本的屏幕又清晰了. 一直以为是 ...
- 遥想大肠包小肠----python装饰器乱弹
说起装饰器就tm蛋疼,在老男孩学习python装饰器,结果第二天默写,全错了,一道题抄十遍,共计二十遍. 要是装饰器是一人,我非要约他在必图拳馆来一场...... 下面容我展示一下默写二十遍的成果 语 ...
- npm源管理
1. 安装淘宝镜像 为了提高npm的安装速度,可以使用淘宝镜像. 使用淘宝镜像的方法有两种: 1. npm install -g cnpm --registry=https://registry.np ...
- python django 连接 sql-server
1.准备工作 python3.6连接sqlserver数据库需要引入pymssql模块 pymssql官方:https://pypi.org/project/pymssql/ 没有安装的话需要: pi ...
- 富文本编辑器直接从 word 中复制粘贴公式
在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...
- java+web+多级文件上传
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- Integer int auto-boxing auto-unboxing ==
Auto-boxing 自动装箱 Auto-unboxing 自动拆箱 == 相等 1.new出来的对象,除非遇到了拆箱的情况,肯定不相等. 因为new对象之前需要在JVM堆中提供空间,所以new出来 ...
- c++ 容器切片反转次序(拷贝到新容器)
code: // rotate_copy algorithm example #include <iostream> // cout #include <algorithm> ...
- 如何修改layer-layui中的confirm
需求: 改成 背景: 这个confirm是layui中的layer弹出框,要想修改这个弹出框的内容岂不是要去修改源码?当我在源码里扒拉半天梳理好了逻辑之后,突然意识到,其实我本可以不必这么麻烦的,直接 ...
- mysql多实例搭建
一)多实例安装 [root@mysqlmaster01 ~]# mkdir /data/mysql_data2[root@mysqlmaster01 ~]# mkdir /data/mysql_dat ...