mfc 中以空格分隔CString字符串并显示,空格长度不确定。
时间: 2025-06-29 19:01:53 浏览: 9
在 MFC 编程中处理以空格分隔的 `CString` 字符串,并将结果展示出来是一个常见的任务。下面我会详细介绍如何完成这一操作。
### 分割 CString
首先,需要理解的是 `CString` 类并没有内置直接分割字符串成数组的方法。因此我们需要编写一段自定义代码来进行此工作。通常我们会使用循环遍历整个字符串并且当遇到空格字符时就停止读取当前单词并保存它到列表中去。
#### 示例代码:
```cpp
void SplitAndShow(CString strInput)
{
// 创建一个新的 CString 来存储每个子串
CString token;
// 使用 CT2CA 将宽字节转换为 ANSI (如果输入是宽字符的话),然后传递给标准 C 库函数 strtok_s 的 _szDelimiters 参数。
LPCTSTR pszSrc = strInput;
const TCHAR* szDelimiters = _T(" ");
// 初始化指向第一个标记的位置
LPTSTR pNextToken;
// 获取首单词并将指针移动至下一个位置开始处
LPTSTR lpszToken = _tcstok_s((LPTSTR)(LPCTSTR)strInput, szDelimiters, &pNextToken);
while(lpszToken != NULL){
// 显示每一个token
AfxMessageBox(lpszToken);
// 继续获取剩余部分中的其他单词直到结束
lpszToken=_tcstok_s(NULL,szDelimiters,&pNextToken);
}
}
```
这段程序会逐个提取出由单个或连续多个空格作为间隔符分开的所有非空白片段,并通过消息框依次显示它们的内容。
注意:上述例子假设输入不会包含前导、尾随或多于两个连在一起的内部空格;如果有这种可能性,则应该先对原始字符串做适当的预处理如去掉多余的空格等再进行拆分处理。
另外请注意 `_tcstok_s()` 函数会在原字符串上修改其内容,在某些场景下这可能是不可接受的行为。如果是这种情况你可以考虑创建源字符串的一份副本用于解析而不是直接在其上面操作。
对于更复杂的解析需求可以探索第三方库例如 Boost.Tokenizer 或者手写更加鲁棒性的算法来自行解决问题。
阅读全文
相关推荐

















