开始多写点算法,坚持每天写代码。
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的用法.
水平有限, 算法只作参考...