题目描述

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() << " ";
});

输出结果

最新文章

  1. 微信小程序demo理解
  2. 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree
  3. Netty系列之Netty高性能之道
  4. oracle 12c 创建PDB用户即Local User (PDB与CDB)
  5. WEB页面采集器编写经验之一:静态页面采集器
  6. hadoop1.1.2安装过程
  7. php 与 js 正则匹配
  8. 在配置IIS负载均衡时,引起的一系列问题
  9. ThinkPHP提交表单判断上传图片经验总结
  10. markdown下编辑latex数学公式
  11. linux 命令之系统活动报告sar
  12. Object-C中的内存管理小记
  13. Android android-common 常用功能和工具集合
  14. Direct3D 顶点缓存
  15. leetcode_question_62 Unique Paths
  16. [ASP.NET]以iTextSharp手绘表格并产生PDF下载
  17. Mysql 中的日期时间字符串查询
  18. linux添加C#运行环境
  19. LINQ To SQL 语法及实例大全【转】
  20. 导出IndoorGML

热门文章

  1. Pysam 处理bam文件
  2. 植物GO注释
  3. R语言与医学统计图形-【19】ggplot2坐标轴调节
  4. Rust 指定安装目录
  5. jquery操作html中图片宽高自适应
  6. keepalived+nginx安装
  7. 『学了就忘』Linux文件系统管理 — 65、LVM逻辑卷管理介绍
  8. hadoop Sort排序
  9. Java RestTemplate传递参数
  10. python的urllib学习