#include
#include
#include //std::transform
using namespace std;
string f_get_mid(string strMain, string str1, string str2, int intCompare)
{ // 得到主字符串中间文字的函数
string strMid = ""; // 返回主字符串初始化为空
long lngStr1Len = str1.length(), lngStr2Len = str2.length();
long lngPos1 = 0, lngPos2 = 0; // 找到的str1 str2 的位置
long lngLen1 = str1.length(); // 结果 5。length不含\0。先算出来,免得后面再算
long lngLen2 = str2.length(); // 结果 6。
string strMidOld = strMain; // 主字符串原样保存到strMidOldstring strMidOld = strMain;
if (intCompare == 1)
{ // 如果是1就对str1 str2不管大小写
transform(strMain.begin(), strMain.end(), strMain.begin(), ::tolower);
// 对主字符串小写
}
lngPos1 = strMain.find(str1, 0); // 先找str1有没有
while (lngPos1 != -1)
{ // 找到str1了
lngPos2 = strMain.find(str2, lngPos1 + lngLen1); // 再找str2有没有
if (lngPos2 != -1)
{ // 找到str2了
if (intCompare == 1)
{ // 如果是1就对str1 str2不管大小写,需要原样输出相同位置的主字符串的字符
strMid += strMidOld.substr((lngPos1 + lngLen1), (lngPos2 - lngPos1 - lngLen1));
}
else
{
strMid += strMain.substr((lngPos1 + lngLen1), (lngPos2 - lngPos1 - lngLen1));
}
strMid += " "; // 加个空格隔开结果
lngPos1 = strMain.find(str1, lngPos2 + lngLen2); // 设置指针到下一个位置开始
}
}
return strMid;
}
int main()
{
string strMain = "百事知道@网址";
strMain += "www网址";
strMain += "ABC你好。Hello
!I
am
Billy
.";
string str1 = ""; // 建议用小写
string str2 = "
"; // 建议用小写
cout << "严格比较str1和str2:" << f_get_mid(strMain, str1, str2, 0) << "\n\n";
cout << "忽略str1和str2大小写:" << f_get_mid(strMain, str1, str2, 1) << "\n\n";
cout << "---------------------------------\n\n";
cout << "到之间的内容:" << f_get_mid(strMain, "", "", 1) << "\n\n";
cout << "之间的内容:" << f_get_mid(strMain, "", 1) << "\n\n";
system("pause");
return 0;
}
运行结果:
严格比较str1和str2:你好。Hello
忽略str1和str2大小写:你好。Hello I am Billy
---------------------------------
到之间的内容:百事知道
之间的内容:http://BaiShiZhiDao.com http://www.baishizhidao.com