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 ...
随机推荐
- Codeforces 538G - Berserk Robot(乱搞)
Codeforces 题目传送门 & 洛谷题目传送门 一道很神的乱搞题 %%% 首先注意到如果直接去做,横纵坐标有关联,不好搞.这里有一个非常套路的技巧--坐标轴旋转,我们不妨将整个坐标系旋转 ...
- 混合(Pooling)样本测序研究
目录 1.混合测序基础 2. 点突变检测 3. BSA 4. BSR 5. 混合样本GWAS分析 6. 混合样本驯化研究 7. 小结 1.混合测序基础 测序成本虽然下降了,但对于植物育种应用研究来说还 ...
- logname
logname命令用来显示用户名称. 语法 logname(选项) 选项 --help:在线帮助: --vesion:显示版本信息.
- mGWAS研究思路
mGWAS(metabolome-based genome-wide association studies)的研究方法和GWAS类似,只是将代谢物含量作为表型性状来与基因位点进行关联.但同时它也有自 ...
- 自动添加shell脚本头部信息
autocmd BufNewFile *.sh exec ":call AddTitleForShell()" function AddTitleForShell() call a ...
- 7 — 简单了解springboot中的thymeleaf
1.官网学习地址 https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 2.什么是thymeleaf? 一张图看明白: 解读: ...
- 学习java 7.11
学习内容: 泛型定义格式:<类型> 优点:把运行时期的问题提前到编译期间:避免了强制类型转换 泛型方法:public class Fanxing { public <T> ...
- Angular中怎样创建service服务来实现组件之间调用公共方法
Angular组件之间不能互相调用方法,但是可以通过创建服务来实现公共方法的调用. 实现 创建服务命令 ng g service 服务路径/服务名 比如这里在app/services目录下创建stor ...
- InnoDB的行锁模式及加锁方法
MYSQL:InnoDB的行锁模式及加锁方法 共享锁:允许一个事务度一行,阻止其他事务获取相同数据集的排他锁. SELECT * FROM table_name WHERE ... LOCK IN S ...
- 加密时java.security.InvalidKeyException: Illegal key size or default parameters解决办法
需 Java几乎各种常用加密算法都能找到对应的实现.因为美国的出口限制,Sun通过权限文件(local_policy.jar.US_export_policy.jar)做了相应限制.因此存在一些问题: ...