c++之面试题(2)实现字符串的分割函数SplitStr
题目描述
3.实现一个将字符串按指定字符分隔的函数,形式已经确定如下,请完成标有“//请补充”的内容。
说明:返回值为是否找到分割符(true找到,false未找到),当未找到分割符时返回原字符串。
举例:SplitStr("abc|bc|c", '|', vect) 返回true, vect结果:abc, bc, c
SplitStr("abc|bc|c", 's', vect) 返回false, vect结果:abc|bc|c
SplitStr("|bc|c", '|', vect) 返回true, vect结果:空字符串, bc, c
bool SplitStr(const char* pStr, char chSplit, vector<string>& vectRet)
{
//请补充
const char* p = pStr;
const char* pStart = pStr;
int32 nLen = 0;
char ch = 0;
while (1)
{
ch = *p;
//请补充
p++;
}
return ((int32)vectRet.size() > 1);
}
代码
自己实现的代码被//----------------------------------------------------------------------------------------夹在中间
bool SplitStr(const char* pStr, char chSplit, std::vector<std::string>& vectRet)
{
//请补充
//----------------------------------------------------------------------------------------
if (nullptr == pStr || NULL == pStr)
return false;
//----------------------------------------------------------------------------------------
const char* p = pStr;
const char* pStart = pStr;
int nLen = 0;
char ch = 0;
while (1)
{
ch = *p;
//----------------------------------------------------------------------------------------
// 已经到字符串结尾,跳出循环
if ('\0' == ch)
{
if (nLen == 0)
{
;
}
else
{
// 将剩下的字符串拷贝到vector中。
std::string str(pStart, nLen);
vectRet.push_back(str);
}
break;
}
// 还没有到字符串的结尾
else
{
// 与分隔符不一致,长度+1,继续找
if (ch != chSplit)
{
nLen++;
}
else
{
// 处理"|"开头的情况
if (p == pStr)
{
pStart += 1;
}
else
{
//
std::string str(pStart, nLen);
vectRet.push_back(str);
// 这里+ 1是为了跳过下一个 分隔符
pStart += nLen + 1;
nLen = 0;
}
}
}
//----------------------------------------------------------------------------------------
p++;
}
return ((int)vectRet.size() > 1);
}
测试
- 1.代码
std::vector<std::string> vec;
bool ret = SplitStr("abc|bc|c", 's', vec);
std::cout << ret << "\n";
std::for_each(std::begin(vec), std::end(vec), [](const std::string& str)
{
std::cout << "str=";
if (0 == str.length())
std::cout << " ";
else
std::cout << str.c_str() << " ";
});
"abc|bc|c" 输出结果:

- 2.代码
std::vector<std::string> vec;
bool ret = SplitStr("abc|bc|c", '|', vec);
std::cout << ret << "\n";
std::for_each(std::begin(vec), std::end(vec), [](const std::string& str)
{
std::cout << "str=";
if (0 == str.length())
std::cout << " ";
else
std::cout << str.c_str() << " ";
});
输出结果:

- 3.代码
std::vector<std::string> vec;
bool ret = SplitStr("|bc|c", '|', vec);
std::cout << ret << "\n";
std::for_each(std::begin(vec), std::end(vec), [](const std::string& str)
{
std::cout << "str=";
if (0 == str.length())
std::cout << " ";
else
std::cout << str.c_str() << " ";
});
输出结果

c++之面试题(2)实现字符串的分割函数SplitStr的更多相关文章
- C++ 字符串的分割函数split 及 用法【转载】
文章出处https://blog.csdn.net/glmushroom/article/details/80690881 之前在C#中总用到字符串的分割,使用系统函数即可,比如: string a ...
- C++的字符串分割函数
原文: C++的字符串没有分割函数,因此需要自己写方便使用.而受到开发工具的影响,有很多用起来比较麻烦啦,下面这个比较不错奥. 用STL进行字符串的分割 涉及到string类的两个函数find和sub ...
- Swift:字符串(String)分割之Substring优雅转换
认识Substring类型 这是一个全新的类型,看类名像是String的子类,但是大家千万别被误导了,Substring并不是String的子类,这是两个不同的类型,但是它们都继承了StringPro ...
- (转)C++常见问题: 字符串分割函数 split
http://www.cnblogs.com/dfcao/p/cpp-FAQ-split.html C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速 ...
- 【原】mysql5.6 split函数_字符串的分割
DROP FUNCTION IF EXISTS `getSplitName`$$ )) RETURNS text BEGIN /* 对逗号进行分离的字符串,分割出'登陆名_用户名/部门名'中的_后部门 ...
- C++常见问题: 字符串分割函数 split
C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速分割这个问题了.列几个常用方法以备不时之需. 方法一: 利用STL自己实现split 函数(常用,简 ...
- 【C++实现python字符串函数库】一:分割函数:split、rsplit
[C++实现python字符串函数库]split()与rsplit()方法 前言 本系列文章将介绍python提供的字符串函数,并尝试使用C++来实现这些函数.这些C++函数在这里做单独的分析,最后我 ...
- js使用split函数按照多个字符对字符串进行分割的方法
这篇文章主要介绍了js使用split函数按照多个字符对字符串进行分割的方法,实例分析了split函数的使用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了js使用split函数按照多个 ...
- hive函数 -- split 字符串分割函数
hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...
随机推荐
- 基因组共线性分析工具MCScanX
软件简介 MCScanX工具集对MCScan算法进行了调整,用于检测共线性和同线性区域,还增加了可视化和下游分析..MCscanX有三个核心工具,以及12个下游分析工具. 软件安装 进入官网http: ...
- R绘图布局包 customLayout
今天介绍一个R画图布局的包,地址如下: https://github.com/zzawadz/customLayout https://www.customlayout.zstat.pl/index. ...
- C++常用的字符串处理函数-全
这是自己用stl实现的一些字符串处理函数和常用的字符串处理技巧,经验正基本无误,可直接使用,若有问题,可相应列出 包括:split string to int int to string join # ...
- WPS表格数据透视表的美化和布局
设计--分类汇总--在组的底部显示所有分类汇总 把二级分类单独放在一类中 设计--报表布局--以表格形式显示 快速调整表格的外观 分析--+/-按钮 设置字段的数字格式以万元为单位 选中任 ...
- oracle中char],varchar,varchar2
VARCHAR.VARCHAR2.CHAR的区别 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串"abc",对于CHAR (20),表示你存储 ...
- python APScheduler模块
简介 一般来说Celery是python可以执行定时任务, 但是不支持动态添加定时任务 (Django有插件可以动态添加), 而且对于不需要Celery的项目, 就会让项目变得过重. APSchedu ...
- 一劳永逸,使用 PicGo + GitHub 搭建个人图床工具
原文链接: 一劳永逸,使用 PicGo + GitHub 搭建个人图床工具 经常写博客的同学都知道,有一个稳定又好用的图床是多么重要.我之前用过七牛云 + Mpic 和微博图床,但总感觉配置起来比较麻 ...
- Yarn 公平调度器案例
目录 公平调度器案例 需求 配置多队列的公平调度器 1 修改yarn-site.xml文件,加入以下从参数 2 配置fair-scheduler.xml 3 分发配置文件重启yarn 4 测试提交任务 ...
- 图形学3D渲染管线学习
图形学3D渲染管线 DX和OpenGL左右手坐标系不同,会有一些差距,得出的矩阵会不一样; OpenGL的投影平面不是视景体的近截面: 顶点(vertexs) 顶点坐标,颜色,法线,纹理坐标(UV), ...
- 【编程思想】【设计模式】【基础模式Fundamental】delegation_pattern
Python版 https://github.com/faif/python-patterns/blob/master/fundamental/delegation_pattern.py #!/usr ...