MFC 字符串分割
打算分割文件路径来着,文件路径分隔符是"\",但是路径前后都没有这个符号,造成处理情况比较复杂.于是想起了链表的方式,手动增加头尾分隔符,这样就只有一种前后都有分隔符的情况了,易于处理.
再拓展一下,分割普通字符串应该也不错,改成C,C++应该也不难.
// 字符串分割
void DivString(CStringArray &arr, CString strSrc, CString strDiv = _T("\\"))
{
arr.RemoveAll(); // 清除原先的内容
CString str = strDiv + strSrc + strDiv; // 头尾增加切割字符串
int iIdxFind = 0, iIdxLast = 0; // 切割索引
while (true) {
iIdxFind = str.Find(strDiv, iIdxLast + 1); // 查找结束位置
if (iIdxFind <= 0) {
break; } // 找不到切割字符串
iIdxLast += strDiv.GetLength(); // 新字符串的开始位置
if (iIdxFind - iIdxLast <= 0) {
continue; } // 过滤空字符串
arr.Add(str.Mid(iIdxLast, iIdxFind - iIdxLast)); // 添加新字符串
iIdxLast = iIdxFind; // 更新最新位置
}
}
// 测试代码
void Test()
{
// 分割路径
CStringArray arr;
DivString(arr, _T("C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe"));
DivString(arr, _T(""));
DivString(arr, _T("\\"));
DivString(arr, _T("\\abc"));
DivString(arr, _T("abc\\"));
}
结果还算满意.