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 ...
随机推荐
- PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台
ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...
- Python time&datetime模块
1.time&datetime模块 time&datetime是时间模块,常用以处理时间相关问题 time.time() #返回当前时间的时间戳timestamp time.sleep ...
- R2CNN模型——用于文本目标检测的模型
引言 R2CNN全称Rotational Region CNN,是一个针对斜框文本检测的CNN模型,原型是Faster R-CNN,paper中的模型主要针对文本检测,调整后也可用于航拍图像的检测中去 ...
- accelerate
accelerate accelerare, accumulare和accurate共享一个含义为to的词根,后半截分别是:fast, pile up, care (关心则精确). 近/反义词: ex ...
- 用usb线配置直流电机驱动器不能配置成功
原因可能是因为usb线的问题 换了三条usb线. 这三条都是通的,用万用表测试都是通的,但是进行电机配置的时候不行. 猜测原因可能是三条usb线的芯材质不同导致压降不同,使得通信故障.
- 3.2 go WaitGroup代码示例
sync.WaitGroup提供了一种安全的多协程处理方法,内部使用race.atomic来处理,避免了资源竞争及锁的产生. 主要的方法有Add.Done.Wait,可以等待一组协程全部执行完毕后,主 ...
- vueAPI (data,props,methods,watch,computed,template,render)
data Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter/setter,从而让 data 的属性能够响应数据变化.实例创建之后,可以通过vm.$data来访问原始数据 ...
- 【Java 8】Stream中的Pipeline理解
基于下面一段代码: public static void main(String[] args) { List<String> list = Arrays.asList("123 ...
- HDC2021技术分论坛:进程崩溃/应用卡死,故障频频怎么办?
作者:jiwenqiang,DFX技术专家 提到开发一个产品,我们通常首先想到的是要实现什么样的功能,但是除了功能之外,非功能属性也会很大程度上影响一个产品的体验效果,比如不定时出现的应用卡死.崩溃 ...
- Apifox(1)比postman更优秀的接口自动化测试平台
Apifox介绍 Apifox 是 API 文档.API 调试.API Mock.API 自动化测试一体化协作平台,定位 Postman + Swagger + Mock + JMeter.通过一套系 ...