C++11 使用CString库函数从主字符串生成子字符串

C++11 使用CString库函数从主字符串生成子字符串,c++11,c-strings,C++11,C Strings,使用CString库函数从主字符串复制子字符串 CString FilterCriteria ="MESSAGE=2 AND READ = 2 AND Instance=\'SMS/MMS\' AND Folder=\'inbox\'"; CString o_filter; 现在,我想将Instance=\'SMS/MMS\'和Folder=\'inbox\'从FilterCriteria复制到o\u filteredFilterCriteria 预期结果: o_filter = Ins

使用CString库函数从主字符串复制子字符串

CString  FilterCriteria ="MESSAGE=2 AND READ = 2 AND Instance=\'SMS/MMS\' 
AND Folder=\'inbox\'";
CString  o_filter;
现在,我想将
Instance=\'SMS/MMS\'和Folder=\'inbox\'
FilterCriteria
复制到
o\u filteredFilterCriteria

预期结果:

o_filter = Instance=\'SMS/MMS\' AND Folder=\'inbox\'.
节目:

int Pos = FilterCriteria.find(instance); 
int First_Pos = FilterCriteria.find("'");
string temp_str = FilterCriteria.substr(First_Pos+1);
string temp_str =FilterCriteria.
int Second_Pos = temp_str.find("'");  

string tempInstance = FilterCriteria.substr(Pos, First_Pos+Second_Pos-
Pos+2);

temp_str = "";

Pos = FilterCriteria.find(folder);// folder position
string Fold_Str = FilterCriteria.substr(Pos);//string after the folder 
First_Pos = Fold_Str.find("'");// first occurence of string
temp_str = Fold_Str.substr(First_Pos+1);// string after '
Second_Pos = temp_str.find("'");// first occurence of ' in string after '
string tempFolder=originalFilterCriteria.substr(Pos, First_Pos+Second_Pos-
Pos+2);

if ( !tempInstance.isEmpty())
{
    o_filter = " AND ";
    o_filter += tempInstance;
}

if (!tempFolder.isEmpty())
{
    o_filter = " AND ";
    o_filter += tempFolder;
}

This code works for string.h library. The same code doesn't work for CString 
functions as CString library doesn't have substr() function. 

我还寻找了一个等价物

像这样使用的
std::string

stdString.substr(begin, end - begin + 1);
mfcString.Mid(begin, end - begin + 1);

//or
mfcString.Right(mfcString.GetLength() - begin).Left(end - begin + 1);
相当于MFC
CString
,如下所示:

stdString.substr(begin, end - begin + 1);
mfcString.Mid(begin, end - begin + 1);

//or
mfcString.Right(mfcString.GetLength() - begin).Left(end - begin + 1);

我想
Find
并用
Mid
剪切就可以了。请参阅下面的示例以更好地理解

我有一个CString作为path=\u T(“StackOverflow是程序员最好的平台”) 我只希望字符串为“StackOverflow是最好的”。所以首先我找到“平台” 然后把那部分切下来

CString path=\u T(“StackOverFlow是程序员的最佳平台”);
int pos=path.Find(_T(“平台”);
路径=路径中间(0,位置);
//输出:
//path=“StackOverflow是最好的”
//或
int length=path.GetLength();
pos=路径查找(_T(“平台”));
路径=路径中间(位置,长度);
//输出:
//path=“程序员的平台。”

您可能正在寻找Thank@IgorTandetnik。这很有用。CString::const_iterator Pos=FilterCriteria.find(实例);CString Inst_str=FilterCriteria.getRight(Pos);CString::const_iterator First_Pos=Inst_str.find(“”);CString temp_str=安装str.getRight(第一个位置+1);CString::const_iterator Second_Pos=temp_str.find(“”);CString tempInstance=FilterCriteria.getMid(Pos,(UInt32)First_Pos+Second_Pos-Pos+2);(错误:无法在第二个参数中将CString::const_迭代器转换为整数)temp_str=“”;如何将CString::const_迭代器转换为整数作为getMid()需要第二个参数作为整数。您必须使用一些我不熟悉的
CString
类。没有名为
getMid
的成员,也没有名为
find
getRight
的成员。我再也不知道你在说什么了。