请按如下步骤写一个函数,以'\0'拆分一个Buffer,将拆分出的字符串放入一个字符串队列:
要求用MFC vector<string> CStringArray
typedef1 声明并实现一个空函数:void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
2 假设此函数已经完成,编写一个测试方法以测试此函数
3 实现此函数void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
4 用已经写好的测试方法测试此函数上面这题是什么意思啊???求解答 最好能给出代码
要求用MFC vector<string> CStringArray
typedef1 声明并实现一个空函数:void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
2 假设此函数已经完成,编写一个测试方法以测试此函数
3 实现此函数void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
4 用已经写好的测试方法测试此函数上面这题是什么意思啊???求解答 最好能给出代码
解决方案 »
- 程序最小化消息截取,下面那个是啊?
- 求救ACTIVE控件中创建控件显示不正常
- 奇思怪想的界面缩放,如何实现啊?
- 达人请进!一个实际问题
- 急问!!请问我的服务端用的是vc做的程序,现在别人想用别的语言能不能跟我的服务端通讯?
- 如何计算一个线程实际使用CPU的时间?
- 为什么MSDN的许多例子在Win32 Debug Unicode或Win32 Release Unicode配置下在WIN98中运行出错
- 简单的屏保问题
- 请问有那个老兄知道那有屏幕录像那种软件(一种录制软件演示的工具)
- recvfrom的参数char FAR* buf到底是什么
- vc关于算法的讨论
- 关于改变窗口大小图像消失的问题!!!急!!!
{
int nLen = 0;
for (; nLen <= nBufLen; )
{
CString strTmp(lpBuf + nLen);
szaDst.Add(strTmp);
nLen = _tcslen(lpBuf + nLen) + 1;
}
}
1 声明并实现一个空函数:void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
2 假设此函数已经完成,编写一个测试方法以测试此函数
3 实现此函数void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
4 用已经写好的测试方法测试此函数
CStringArray szaDst;void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
{
int nLen = 0;
for (; nLen <= nBufLen; )
{
CString strTmp(lpBuf + nLen);
szaDst.push_back(strTmp);
nLen = _tcslen(lpBuf + nLen) + 1;
}
}建议楼主命名好点,vector<string> CStringArray;这样会误解的
请按如下步骤写一个函数,以'\0'拆分一个Buffer,将拆分出的字符串放入一个字符串队列:1 声明并实现一个空函数:void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
2 假设此函数已经完成,编写一个测试方法以测试此函数
3 实现此函数void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
4 用已经写好的测试方法测试此函数
void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
{
int pos = 0, len = 0;
TCHAR c = '\0';
string str = _T("");
if(nBufLen <= 0)
return;
while(pos = (lpBuf->find(c,pos)))//查找'\0'
{
len = pos -len;
str.copy(lpBuf,len,pos);//拷贝从pos开始的len长度str
szaDst.push_back(str);//放入CStringArray
}}
hacker1125 理解对了 但是不严谨 能再改善下吗 谢谢
└CStringArray
CStringArray类支持CString对象数组。
CStringArray的成员函数类似于CObArray类的成员函数
{
int nLen = 0;
for (; nLen <= nBufLen; )
{
CString strTmp(lpBuf + nLen);
if(strTmp.GetLength() > 0)
szaDst.Add(strTmp);
nLen = _tcslen(lpBuf + nLen) + 1;
}
}
void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
{
int pos = 0, len = 0;
TCHAR c =L"\0";
Cstring str = _T("");
if(nBufLen <= 0)
return;
while(lpBuf->find(c,pos)!=-1)//查找'\0'
{
len = pos -len;
if(!len)
{pos++;
continue;
}
memcpy(str,lpBuf+pos,len);
szaDst.push_back(str);//放入CStringArray
}}
while(lpBuf->find(c,pos)!=-1)//查找'\0'
{
if(lpBuf->find(c,pos)==pos)
{
pos++;
len=pos;
continue;
}
len = pos -len;
memcpy(str,lpBuf+pos,len);
len=pos;
szaDst.push_back(str);//放入CStringArray
saDst[1] = "123456" 你那种方法把0oldn_CC_bird123456
放一起了
不用能_tcscpy来处理这个buffer.
原因找了好半天...
主要是前面的\0是\0,后面的的\0123456,这里的取的是\012来转意的.所以自然就有问题了。
还有长度的累加也有问题。唉,几行代码这么多bug,惭愧啊..
CString strText(_T("\\0\\0\\012345\\0\\0"));
CString strToken(_T(""));
int curPos = 0;
LPCTSTR szToken(_T("\\0"));
while(_T("") != (strToken = strText.Tokenize(szToken, curPos)))
{
if(!strToken.IsEmpty())
AfxMessageBox(strToken);
}