STL比较范围(equal, lexicographical_compare, mismatch)

#include <algorithm>
#include <functional>
#include <string>
#include <vector>
#include "PrintSequence.h"
using namespace std;

int main()
{
	string s1("This is a test");
	string s2("This is a Test");
	
	cout << "s1 = " << s1 << endl;
	cout << "s2 = " << s2 << endl;
	
	cout << "compare s1 & s1: "
		<< equal(s1.begin(), s1.end(), s1.begin()) << endl;//两个元素完全相同返回真
	cout << "compare s1 & s2: "
		<< equal(s1.begin(), s1.end(), s2.begin()) << endl;;
	
	cout << "lexicographical_compare s1 & s1: "
		<< lexicographical_compare(s1.begin(), s1.end(), //第一个范围“字典编纂”顺序小于第二个范围则返回真
		s1.begin(), s1.end()) << endl;					 //如果执行到一个范围的结尾还没有找到不匹配的元素对,
	cout << "lexicographical_compare s1 & s2: "			 //这时短的范围领先,即小		
		<< lexicographical_compare(s1.begin(), s1.end(), 
		s2.begin(), s2.end()) << endl;
	cout << "lexicographical_compare s2 & s1: "
		<< lexicographical_compare(s2.begin(), s2.end(), 
		s1.begin(), s1.end()) << endl;
	cout << "lexicographical_compare shortened "
		"s1 & full-length s2: " << endl;

	string s3(s1);
	while(s3.length() != 0)
	{
		bool result = lexicographical_compare(
			s3.begin(), s3.end(), s2.begin(), s2.end());
		cout << s3 << endl << s2 << ", result = " << result << endl;

		if(result == true)
			break;
		s3 = s3.substr(0, s3.length() - 1);
	}

	pair<string::iterator, string::iterator> p =
		mismatch(s1.begin(), s1.end(), s2.begin()); //p.first是第一个范围出现不匹配元素的位置
	print(p.first, s1.end(), "p.first", "");		//p.second是第二个范围出现不匹配元素的位置
	print(p.second, s2.end(), "p.second", "");
	system("pause");
	return 0;
}

/*
结果:
s1 = This is a test
s2 = This is a Test
compare s1 & s1: 1
compare s1 & s2: 0
lexicographical_compare s1 & s1: 0
lexicographical_compare s1 & s2: 0
lexicographical_compare s2 & s1: 1
lexicographical_compare shortened s1 & full-length s2:
This is a test
This is a Test, result = 0
This is a tes
This is a Test, result = 0
This is a te
This is a Test, result = 0
This is a t
This is a Test, result = 0
This is a
This is a Test, result = 1
p.first: test
p.second: Test
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值