我正在尝试编写一个函数,以使用CStrings检索两个标签或字符之间的值,到目前为止,我还没有做到这一点。
CODE REMOVED
我很确定StartIndex和EndIndex具有正确的值,但是我陷入了最后一步,我应该从标签之间提取子字符串。
编辑://感谢Igor Tandetnik,它可以正常工作。如果有人知道为什么SubStr只用wcout正确打印,如果我用
(LPCWSTR)
显式转换它的话,将不胜感激。如果有人需要它或要改进它,我将在下面留下工作代码。CString ExtractString(CString strSource, CString strStart, CString strEnd)
{
CString SubStr = L"";
int iEndIndex, iStartIndex = strSource.Find(strStart);
iStartIndex += strStart.GetLength();
iEndIndex = strSource.Find(strEnd, iStartIndex);
if (iStartIndex == -1 || iEndIndex == -1)
{
wcout << L"TAG not found!" << endl;
return SubStr;
}
SubStr = strSource.Mid(iStartIndex, (iEndIndex - iStartIndex));
SubStr.Trim();
return SubStr;
}
最佳答案
如果将std::wstring
传递给wcout
,则效果很好,因为这些家伙彼此了解。 wcout
将为<<
选择正确的std::wstring
运算符
但是C++标准库和MFC是分开的。 wcout
不知道该如何处理CString
,因此它将CString
对象视为const void*
,它使用operator<<(const void*)
打印地址。
下一步,CString
返回(const wchar_t*
)缓冲区。但是wcout
已经决定const void*
,因此wcout
会打印CString
返回的字符串缓冲区的地址。(const wchar_t*)
强制转换将指示wcout
使用正确的<<
运算符。您也可以使用CString::GetString()
来让wcout
知道正在发送宽字符。
wcout << LPCWSTR(SubStr);
//or
wcout << SubStr.GetString();