MFC在标签之间提取CString

时间:2018-04-13 16:05:09

标签: c++ c++11 visual-c++ mfc

我尝试使用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;
}

1 个答案:

答案 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();