编程语言
首页 > 编程语言> > c++之面试题(2)实现字符串的分割函数SplitStr

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

测试

	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" 输出结果:

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

输出结果:

	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