流的字符串分界符
在C++的iostream中,有流的字符串分界符:
" “和”"都代表简单的分隔。
因此,使用流来做字符串分隔的话,有一个比较简单的方案就是将原定义的分隔符通过替换的方式变成流的分隔符。然后再录入流中就能自然的实现字符串的分隔了。
如何针对字符串进行替换
这里以最常见的一个例子来说。“,”分隔符经常出现再csv之类的文件中。
如果你使用的是普通string类型(char* 或者char[]也可以),那么你可以直接使用string.replace(x,y)把x变成y的函数。
如果你是CString的话,你可以看下面这个例子:
void CMFCSTREAMREPLACEDlg::OnBnClickedReplace()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
STRING_E.GetWindowText(str);
CString x = _T(",");
CString y = _T(" ");
str.Replace(x,y);
STRING_E.SetWindowText(str);
}
这是进行替换前的数据。
这是进行替换后的数据。
完成替换后,使用流进行分割
流会自动识别出空格来,把一个连续的字符串分割成一份一份的。
我们可以把CString字符串转String后录入流中再读取(分隔嘛),代码如下:
void CMFCSTREAMREPLACEDlg::OnBnClickedDivide()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
STRING_E.GetWindowText(str);
CString x = _T(",");
CString y = _T(" ");
str.Replace(x, y);
STRING_E.SetWindowText(str);
//CString转String
size_t i;
int iSize;
iSize = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL); //iSize =wcslen(pwsUnicode)+1=6
char* pMBBuffer = (char*)malloc(iSize);
wcstombs_s(&i, pMBBuffer, (size_t)iSize,
str, (size_t)iSize - 1);
istringstream is(pMBBuffer);
char buff;
while (is>>buff) {
CString box(buff);
MessageBox(box);
}
}
效果是把输入的字符串实现了一份一份的输出:
输入完成后,点击DIVIDE按钮实现了一份一份的输出: