字符串操作
void StringUtil::Split(const CString& text, const ACHAR* separator, std::vector<CString>& result, bool bAddEmptyStr){
int prev = 0, current = 0;// 初始化两个指针,prev(前一个索引号)和current(当前索引号),都设置为0
CString strCopyTxT = text;// 创建一个text的副本,并去除其右边的空格
strCopyTxT.TrimRight(采用T(" "));
if (strCopyTxT.Find(separator,0)<0)//如果在副本中找不到分隔符,未找到返回-1,那么整个副本就是一个单独的字符串
{
if (strCopyTxT.GetLength()>0)
{
result.push采用back(strCopyTxT);// 如果副本的长度大于0,则将其添加到字符串容器中
}
// 如果传入的字符串长度为0,啥也不添加
return;
}
// 以下为至少发现一个分隔符,获得字符串总长度
int length = strCopyTxT.GetLength();// 初始化一个标志位,表示是否已经找到了所有的分隔符
bool bExit = false;
while (true)// 开启无限循环:注意循环中的break语句
{
current = strCopyTxT.Find(separator, prev); // 在副本中查找分隔符,从prev指针的位置开始查找
if (current == -1)// 到最后一组了
{
current = length;
bExit = true;// 如果找不到分隔符,将整个字符串长度赋值current,标识退出变量为真
}
// 取最后一个分隔符到结尾的字符串,Mid见下注释
CString item = strCopyTxT.Mid(prev, current - prev);
if (bAddEmptyStr || item.GetLength()>0)
{ // 添加进容器的条件:每个提取的子字符串是否过滤0长度
result.push采用back(item);// 如果bAddEmptyStr为true,或者子字符串的长度大于0,则将子字符串添加到结果列表中
}
if (bExit)
{
break;// 如果已经找到了所有的分隔符,那么跳出循环
}
prev = current + int(采用tcslen(separator)); // 将prev指针移动到当前分隔符的后面,以便在下一次循环中查找下一个分隔符
}
}
// 合并字符串:传入字符串容器、分隔符,返回合并的字符串
CString StringUtil::Join(const std::vector<CString>& items, const ACHAR *spearator)
{
CString strResult;// 逐个拼接容器中的字符串
for (int i = 0; i < items.size();i++)
{
strResult += items.at(i) + spearator;
}// 删除右侧的空字符
strResult.TrimRight(spearator);//调用'TrimRight'函数,从'strResult'的右侧删除所有的分隔符。这样做是为了避免在最后一个元素后面出现不必要的分隔符
return strResult;// 返回拼接好的字符串
}
页:
[1]