我尝试使用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;
}
答案 0 :(得分:1)
如果您将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();