现在的位置: 首页 > 综合 > 正文

algorithm_1

2017年12月28日 ⁄ 综合 ⁄ 共 1597字 ⁄ 字号 评论关闭

开始多写点算法,坚持每天写代码。

2012_3_19

1.求二个集合A、B交集的补集:以整型集合为例。

#include <set>
using namespace std;

set<int> GeSet(set<int> A, set<int> B)
{
	set<int> C(A);
	pair<set<int>::iterator , bool> result;//注意pair的用法
	
	for(set<int>::iterator it = B.begin(); it != B.end(); it++)
	{
		result = C.insert(*it);//insert 里面不是it而是*it 
		//insert返回值是一个迭代器和bool的pair。
		if(!result.second)
		{
			C.erase(result.first);//这个还是有问题的
		}
	}

	return C;
} 

注意,insert 和 erase的用法。

template<class InputIterator> void insert(InputIterator _First,InputIterator _Last);
template<class ValTy> pair<iterator, bool> insert( ValTy&& _Val );
template<class ValTy> iterator insert(const_iterator _Where,ValTy&& _Val);

返回值,  iterator返回的是插入位置的迭代器 或者 是插入失败 该key的位置.

iterator erase(iterator _Where);
iterator erase(iterator _First,iterator _Last);
size_type erase(const key_type& _Key);

删除可以删除迭代器, 可以删除key. set的key也是唯一的.

2. 输入一行字符,求英文字母,数字,空格,其它字符的个数.
一 个有用的string IO操作:getling。这个函数接受两个参数:一个输入流对象和一个string对象。getline函数从输入流的下一行读取,并保存读取的内容到 string中,但不包括换行符。和输入操作符不一样的是,getline并不忽略行开头的换行符。只要getline遇到换行符,即便它是输入的第一个 字符,getline也将停止读入并返回。如果第一个字符就是换行符,则string参数将被置为空string。
getline函数将istream参数作为返回值,和输入操作符一样也把它用作判断条件。

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char** argv)
{
	int charCount = 0, numCount = 0, spaceCount = 0, otherCount = 0;	
	
	string strLine;
	getline(cin , strLine);

	for(int i = 0; i < strLine.length(); i++)
	{
		char c = strLine.at(i);
		if((c <= 'Z' && c>= 'A') || (c <= 'z' && c>= 'a'))
			charCount++;
		else if(c <= '9' && c>= '0')
			numCount++;
		else if(c == ' ')
			spaceCount++;
		else
			otherCount++;
	}

	cout<<charCount<<","<<numCount<<","<<spaceCount<<","<<otherCount<<endl;
	return 0;
}

注意 string 的头文件 #include <string>  "string.h" <CString>的区别 .

在引用<string>的头文件后, 还要用到std. using std::string;

注意getline的用法.



水平有限, 算法只作参考...







【上篇】
【下篇】

抱歉!评论已关闭.