ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++之面试题(2)实现字符串的分割函数SplitStr

2020-12-23 21:33:14  阅读:239  来源: 互联网

标签:std pStr 面试题 bc SplitStr c++ nLen char


题目描述

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

输出结果

标签:std,pStr,面试题,bc,SplitStr,c++,nLen,char
来源: https://www.cnblogs.com/pandamohist/p/14181474.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有