mfc 中以空格分隔CString字符串并显示,空格长度不确定,用正则表达式。用CString类方法
时间: 2025-06-29 11:01:52 浏览: 7
在MFC编程中,`CString` 类用于处理字符串操作非常方便。要将 `CString` 字符串按不定长空格分割,并考虑使用正则表达式来实现这一功能,你可以结合 ATL 的正则表达式库 (`CAtlRegExp`) 或者直接利用 MFC 提供的功能。
不过需要注意的是,对于简单的空格分割任务,通常不需要复杂的正则表达式支持;可以先尝试 `CString::Tokenize()` 函数来进行基本的单词解析工作。但如果确实需要更高级别的模式匹配能力,则引入正则会是一个不错的选择。
下面给出一种基于正则表达式的解决方案:
### 使用正则表达式分割 CString
```cpp
#include <afx.h>
#include <atlrx.h> // 包含ATL 正则表达式头文件
void SplitStringBySpaces(const CString& strInput, CArray<CString>& arrOutput) {
CRegexp re(L"\\s+"); // 定义一个匹配任意长度空白字符(包括制表符等)的正则规则
// 如果只需要匹配普通空格可以用 " +"
int nPos = 0;
while (nPos >= 0 && nPos <= strInput.GetLength()) {
CString token;
if (!re.Match(strInput.Mid(nPos), &token)) break;
// 清除多余的非字母数字字符前后的多余部分
CString trimmedToken = token.Trim();
if (!trimmedToken.IsEmpty())
arrOutput.Add(trimmedToken);
nPos += token.GetLength();
}
}
// 示例调用
int main() {
CString inputStr = L"这是一个 测试例子 带有多个 空白";
CArray<CString> resultArr;
SplitStringBySpaces(inputStr, resultArr);
for(int i=0;i<resultArr.GetSize();i++)
printf("%S\n", static_cast<LPCWSTR>(resultArr.GetAt(i)));
}
```
请注意上述示例程序假设您正在编写一个控制台应用程序,并且已经正确设置了项目属性以包含必要的MFC和ATL组件支持。实际应用环境中可能会有所不同,请适当调整代码适应您的具体情况。
另外提醒一点,在真实开发过程中我们往往不会如此复杂地去解决问题——除非真的遇到了特别的情况才需要用到这种方式;一般情况下推荐使用简单而高效的内置函数如 `CString::Tokenize()` 来完成类似的任务。
阅读全文
相关推荐













