我正在尝试编写一个函数,以使用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();

07-28 04:36